From cc112f5b3e19318a546378ce818c48cff138bb99 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sat, 3 Mar 2018 14:27:56 +0800 Subject: [PATCH] auto commit --- notes/设计模式.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/notes/设计模式.md b/notes/设计模式.md index 097279f2..d7a44bc4 100644 --- a/notes/设计模式.md +++ b/notes/设计模式.md @@ -1312,13 +1312,15 @@ public class Client { **2. 模式定义** -允许将对象组合成树形结构来表现“整体 / 部分”层次结构。 +允许将对象组合成树形结构来表现“整体/部分”层次结构。 -组合能让客户以一致的方式处理个别对象以及对象组合。 +组合能让客户以一致的方式处理个别对象以及组合对象。 **3. 模式类图** -由于组合(Composite)类拥有一个组件(Component)对象,因此组合对象位于树形结构的中间,它还可以继续操作这个组件对象,并忽略组件对象的具体类型。 +组件(Component)类是组合类(Composite)和叶子类(Leaf)的父类,可以把组合类看成是树的中间节点。 + +组合类拥有一个组件对象,因此组合类的操作可以委托给组件对象去处理,而组件对象可以是另一个组合类或者叶子类。 ![](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); } ``` + ```java public class Leaf extends Component { public Leaf(String name) { @@ -1349,7 +1352,7 @@ public class Leaf extends Component { @Override public void addChild(Component component) { - throw new UnsupportedOperationException(); // 牺牲透明性换取单一职责原则 , 这样就不用考虑是叶子节点还是组合节点 + throw new UnsupportedOperationException(); // 牺牲透明性换取单一职责原则,这样就不用考虑是叶子节点还是组合节点 } @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 { private List childs; @@ -1391,6 +1392,7 @@ public class Composite extends Component { } } ``` + ```java public class Client { public static void main(String[] args) { @@ -1427,9 +1429,9 @@ Composite:root **1. 模式定义** -允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 +允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它所属的类。 -状态模式的类图和策略模式一样,并且都是能够动态改变对象的行为。但是状态模式是通过状态对象的状态转移来改变客户对象组合的状态对象,而策略模式是通过客户对象本身的决策来改变组合的策略对象。例如,状态模式下,客户对象委托状态对象进行一个处理操作,那么状态对象有可能发生状态转移,使得客户对象拥有的状态对象发生改变。状态对象组合了客户对象,状态转移是状态对象通过改变客户对象所组合的状态对象实现的。 +状态模式的类图和策略模式一样,并且都是能够动态改变对象的行为。但是状态模式是通过状态对象的状态转移来改变客户对象组合的状态对象,而策略模式是通过客户对象本身的决策来改变组合的策略对象。例如,状态模式下,客户对象委托状态对象进行一个处理操作,那么状态对象有可能发生状态转移,使得客户对象拥有的状态对象发生改变。 **2. 模式类图**