From 95f405f74aca6e814f0fe6bcc6c5072bbb9cc74a Mon Sep 17 00:00:00 2001
From: CyC2018 <1029579233@qq.com>
Date: Fri, 16 Mar 2018 23:24:10 +0800
Subject: [PATCH] auto commit
---
notes/设计模式.md | 48 ++++++++++++++++++-----------------------------
1 file changed, 18 insertions(+), 30 deletions(-)
diff --git a/notes/设计模式.md b/notes/设计模式.md
index fcbfac84..3016b936 100644
--- a/notes/设计模式.md
+++ b/notes/设计模式.md
@@ -51,7 +51,7 @@
**4. 设计原则**
-**封装变化** 在这里变化的是鸭子叫和飞行的行为方式。
+**封装变化** 在这里变化的是鸭子叫和飞行的行为方式。
**针对接口编程,而不是针对实现编程** 变量声明的类型为父类,而不是具体的某个子类。父类中的方法实现不在父类,而是在各个子类。程序在运行时可以动态改变变量所指向的子类类型。
@@ -71,7 +71,7 @@
**6. 模式定义**
-**策略模式** :定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
+**策略模式** 定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
**7. 实现代码**
@@ -318,13 +318,13 @@ StatisticsDisplay.update:1.0 1.0 1.0
动态地将责任附加到对象上。在扩展功能上,装饰者提供了比继承更有弹性的替代方案。
-下图表示在 DarkRoast 饮料上新增新添加 Mocha 配料,之后又添加了 Whip 配料。DarkRoast 对象被 Mocha 包裹,Mocha 对象又被 Whip 包裹。它们都继承自相同父类,都有 cost() 方法,外层对象的 cost() 方法调用了内层对象的 cost() 方法。
+下图表示在 DarkRoast 饮料上新增新添加 Mocha 配料,之后又添加了 Whip 配料。DarkRoast 被 Mocha 包裹,Mocha 又被 Whip 包裹。它们都继承自相同父类,都有 cost() 方法,外层类的 cost() 方法调用了内层类的 cost() 方法。
**3. 模式类图**
-装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件类型(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件类型,这样它可以装饰其它装饰者或者具体组件。所谓装饰,就是把这个装饰者套在被装饰的对象之外,从而动态扩展被装饰者的功能。装饰者的方法有一部分是自己的,这属于它的功能,然后调用被装饰者的方法实现,从而也保留了被装饰者的功能。可以看到,具体组件应当是装饰层次的最低层,因为只有具体组件的方法实现不需要依赖于其它对象。
+装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。所谓装饰,就是把这个装饰者套在被装饰上,从而动态扩展被装饰者的功能。装饰者的方法有一部分是自己的,这属于它的功能,然后调用被装饰者的方法实现,从而也保留了被装饰者的功能。可以看到,具体组件应当是装饰层次的最低层,因为只有具体组件的方法实现不需要依赖于其它对象。
@@ -962,23 +962,15 @@ Light is on!
**2. 模式类图**
-适配器模式有两种实现方式,一种是对象方式,一种是类方式。
-
-对象方式是通过组合的方法,让适配器类(Adapter)拥有一个待适配的对象(Adaptee),Adapter 把操作委托给 Adaptee。
+适配器类(Adapter)组合一个待适配的对象(Adaptee),Adapter 把操作委托给 Adaptee。
-
-类方式用到多重继承,Adapter 继承 Target 和 Adaptee,先把 Adapter 当成 Adaptee 类型然后实例化一个对象,再把它当成 Target 类型的,这样 Client 就可以把这个对象当成 Target 的对象来处理,同时拥有 Adaptee 的方法。
-
-
-
-
**3. 问题描述**
-鸭子(Duck)和火鸡(Turkey)拥有不同的叫声,Duck 调用的是 quack() 方法,而 Turkey 调用 gobble() 方法。
+鸭子(Duck)和火鸡(Turkey)拥有不同的叫声,Duck 的叫声调用 quack() 方法,而 Turkey 调用 gobble() 方法。
-要求将 Turkey 的 gobble() 方法适配成 Duck 的 quack() 方法,从而让火鸡冒充鸭子。
+要求将 Turkey 的 gobble() 方法适配成 Duck 的 quack() 方法,从而让火鸡冒充鸭子!
**4. 解决方案类图**
@@ -1038,10 +1030,6 @@ public class DuckTestDrive {
gobble!
```
-**6. Enumration 适配成 Iterator**
-
-
-
# 外观模式
**1. 模式定义**
@@ -1050,13 +1038,13 @@ gobble!
**2. 模式类图**
-
+
**3. 问题描述**
家庭影院中有众多电器,当要进行观看电影时需要对很多电器进行操作。要求简化这些操作,使得家庭影院类只提供一个简化的接口,例如提供一个看电影相关的接口。
-
+
**4. 解决方案类图**
@@ -1064,7 +1052,7 @@ gobble!
**5. 设计原则**
-**最少知识原则** :只和你的密友谈话。也就是应当使得客户对象所需要交互的对象尽可能少。
+**最少知识原则** :只和你的密友谈话。也就是客户对象所需要交互的对象应当尽可能少。
**6. 代码实现**
@@ -1090,9 +1078,9 @@ gobble!
-**4. 解决方案类图**
+**4. 问题的解决方案类图**
-其中 prepareRecipe() 方法就是模板方法,它确定了其它四个方法的具体执行步骤。其中 brew() 和 addCondiments() 方法在子类中实现。
+prepareRecipe() 方法就是模板方法,它确定了其它四个方法的具体执行步骤。其中 brew() 和 addCondiments() 方法在子类中实现。
@@ -1196,7 +1184,7 @@ Tea.addCondiments
- Iterator 主要定义了 hasNext() 和 next() 方法。
-- Client 需要拥有一个 Aggregate 对象,这是很明显的。为了迭代变量 Aggregate 对象,也需要拥有 Iterator 对象。
+- Client 组合了 Aggregate 对象,为了迭代遍历 Aggregate 对象,也需要组合 Iterator 对象。
@@ -1276,9 +1264,9 @@ public class Client {
**4. Java 内置的迭代器**
-在使用 Java 的迭代器实现时,需要让聚合对象去实现 Iterable 接口,该接口有一个 iterator() 方法会返回一个 Iterator 对象。
+需要让聚合类实现 Iterable 接口,该接口有一个 iterator() 方法会返回一个 Iterator 对象。
-使用 Java 内置的迭代器实现,客户对象可以使用 foreach 循环来遍历聚合对象中的每个元素。
+可以使用 foreach 循环来顺序访问聚合对象中的每个元素。
Java 中的集合类基本都实现了 Iterable 接口。
@@ -1340,11 +1328,11 @@ public class Client {
**1. 设计原则**
-一个类应该只有一个引起改变的原因。
+一个类应该只有一个引起它改变的原因。
**2. 模式定义**
-允许将对象组合成树形结构来表现“整体/部分”层次结构。
+允许将对象组合成树形结构来表现“整体/部分”关系。
组合能让客户以一致的方式处理个别对象以及组合对象。
@@ -1352,7 +1340,7 @@ public class Client {
组件(Component)类是组合类(Composite)和叶子类(Leaf)的父类,可以把组合类看成是树的中间节点。
-组合类拥有一个组件对象,因此组合类的操作可以委托给组件对象去处理,而组件对象可以是另一个组合类或者叶子类。
+组合对象拥有一个组件对象,因此组合对象的操作可以委托给组件对象去处理,而组件对象可以是另一个组合对象或者叶子对象。