auto commit
This commit is contained in:
parent
e26d655b93
commit
cc112f5b3e
@ -1312,13 +1312,15 @@ public class Client {
|
|||||||
|
|
||||||
**2. 模式定义**
|
**2. 模式定义**
|
||||||
|
|
||||||
允许将对象组合成树形结构来表现“整体 / 部分”层次结构。
|
允许将对象组合成树形结构来表现“整体/部分”层次结构。
|
||||||
|
|
||||||
组合能让客户以一致的方式处理个别对象以及对象组合。
|
组合能让客户以一致的方式处理个别对象以及组合对象。
|
||||||
|
|
||||||
**3. 模式类图**
|
**3. 模式类图**
|
||||||
|
|
||||||
由于组合(Composite)类拥有一个组件(Component)对象,因此组合对象位于树形结构的中间,它还可以继续操作这个组件对象,并忽略组件对象的具体类型。
|
组件(Component)类是组合类(Composite)和叶子类(Leaf)的父类,可以把组合类看成是树的中间节点。
|
||||||
|
|
||||||
|
组合类拥有一个组件对象,因此组合类的操作可以委托给组件对象去处理,而组件对象可以是另一个组合类或者叶子类。
|
||||||
|
|
||||||
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics//f99c019e-7e91-4c2e-b94d-b031c402dcb5.jpg)
|
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics//f99c019e-7e91-4c2e-b94d-b031c402dcb5.jpg)
|
||||||
|
|
||||||
@ -1341,6 +1343,7 @@ public abstract class Component {
|
|||||||
abstract protected void print(int level);
|
abstract protected void print(int level);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public class Leaf extends Component {
|
public class Leaf extends Component {
|
||||||
public Leaf(String name) {
|
public Leaf(String name) {
|
||||||
@ -1349,7 +1352,7 @@ public class Leaf extends Component {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addChild(Component component) {
|
public void addChild(Component component) {
|
||||||
throw new UnsupportedOperationException(); // 牺牲透明性换取单一职责原则 , 这样就不用考虑是叶子节点还是组合节点
|
throw new UnsupportedOperationException(); // 牺牲透明性换取单一职责原则,这样就不用考虑是叶子节点还是组合节点
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1361,10 +1364,8 @@ public class Leaf extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
```java
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
|
```java
|
||||||
public class Composite extends Component {
|
public class Composite extends Component {
|
||||||
|
|
||||||
private List<Component> childs;
|
private List<Component> childs;
|
||||||
@ -1391,6 +1392,7 @@ public class Composite extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public class Client {
|
public class Client {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
@ -1427,9 +1429,9 @@ Composite:root
|
|||||||
|
|
||||||
**1. 模式定义**
|
**1. 模式定义**
|
||||||
|
|
||||||
允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
|
允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它所属的类。
|
||||||
|
|
||||||
状态模式的类图和策略模式一样,并且都是能够动态改变对象的行为。但是状态模式是通过状态对象的状态转移来改变客户对象组合的状态对象,而策略模式是通过客户对象本身的决策来改变组合的策略对象。例如,状态模式下,客户对象委托状态对象进行一个处理操作,那么状态对象有可能发生状态转移,使得客户对象拥有的状态对象发生改变。状态对象组合了客户对象,状态转移是状态对象通过改变客户对象所组合的状态对象实现的。
|
状态模式的类图和策略模式一样,并且都是能够动态改变对象的行为。但是状态模式是通过状态对象的状态转移来改变客户对象组合的状态对象,而策略模式是通过客户对象本身的决策来改变组合的策略对象。例如,状态模式下,客户对象委托状态对象进行一个处理操作,那么状态对象有可能发生状态转移,使得客户对象拥有的状态对象发生改变。
|
||||||
|
|
||||||
**2. 模式类图**
|
**2. 模式类图**
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user