From 3dd3a1438542e6901a3e23339801d9ca07451583 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Fri, 16 Mar 2018 22:30:16 +0800 Subject: [PATCH] auto commit --- notes/设计模式.md | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/notes/设计模式.md b/notes/设计模式.md index 5d5d9619..3f3dee15 100644 --- a/notes/设计模式.md +++ b/notes/设计模式.md @@ -6,7 +6,7 @@ * [工厂模式](#工厂模式) * [1. 简单工厂](#1-简单工厂) * [2. 工厂方法模式](#2--工厂方法模式) - * [3. 抽象工厂模式](#3--抽象工厂模式) + * [3. 抽象工厂模式](#3-抽象工厂模式) * [单件模式](#单件模式) * [命令模式](#命令模式) * [适配器模式](#适配器模式) @@ -328,7 +328,7 @@ StatisticsDisplay.update:1.0 1.0 1.0

-**4. 问题解决方案类图** +**4. 问题的解决方案类图**

@@ -427,7 +427,7 @@ Pizza 类有很多子类,要求根据不同的情况用不同的子类实例

-**3. 解决方案类图** +**3. 问题的解决方案类图**

@@ -438,6 +438,7 @@ public interface Pizza { public void make(); } ``` + ```java public class CheesePizza implements Pizza{ @Override @@ -446,6 +447,7 @@ public class CheesePizza implements Pizza{ } } ``` + ```java public class GreekPizza implements Pizza{ @Override @@ -454,6 +456,7 @@ public class GreekPizza implements Pizza{ } } ``` + ```java public class SimplePizzaFactory { public Pizza createPizza(String type) { @@ -467,6 +470,7 @@ public class SimplePizzaFactory { } } ``` + ```java public class PizzaStore { public static void main(String[] args) { @@ -487,21 +491,23 @@ CheesePizza **1. 问题描述** -每个地区的 Pizza 店虽然种类相同,但是都有自己的风味,需要单独区分。例如,一个客户点了纽约的 cheese 种类的 Pizza 和在芝加哥点的相同种类的 Pizza 是不同的。 +每个地区的 PizzaStore 卖的 Pizza 虽然种类相同,但是都有自己的风味。一个客户点了纽约的 cheese 种类的 Pizza 和在芝加哥点的相同种类的 Pizza 是不同的。要求设计出满足条件的 PizzaStore。 **2. 模式定义** -定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法让类把实例化推迟到子类。 +定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化推迟到子类。 **3. 模式类图** -在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象。下图中,Creator 有一个 anOperation() 方法,这个方法需要用到一组产品类,这组产品类由 factoryMethod() 方法创建。该方法是抽象的,需要由子类去实现。 +在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象。 + +下图中,Creator 有一个 anOperation() 方法,这个方法需要用到一组产品类,这组产品类由 factoryMethod() 方法创建。该方法是抽象的,需要由子类去实现。

-**4. 解决方案类图** +**4. 问题的解决方案类图** -PizzaStore 由 orderPizza() 方法,顾客可以用它来下单。下单之后需要先使用 createPizza() 来制作 Pizza,这里的 createPizza() 就是 factoryMethod(),不同的 PizzaStore 子类实现了不同的 createPizza()。 +PizzaStore 有 orderPizza() 方法,顾客可以用它来下单。下单之后需要先使用 createPizza() 来制作 Pizza,这里的 createPizza() 就是 factoryMethod(),不同的 PizzaStore 子类实现了不同的 createPizza()。

@@ -607,11 +613,11 @@ NYStyleCheesePizza is making.. ChicagoStyleCheesePizza is making.. ``` -## 3. 抽象工厂模式 +## 3. 抽象工厂模式 **1. 模式定义** -提供一个接口,用于创建 **相关对象家族** ,而不需要明确指定具体类。 +提供一个接口,用于创建 **相关的对象家族** ,而不需要明确指定具体类。 **2. 模式类图** @@ -619,7 +625,7 @@ ChicagoStyleCheesePizza is making.. 抽象工厂模式用到了工厂模式来创建单一对象,在类图左部,AbstractFactory 中的 CreateProductA 和 CreateProductB 方法都是让子类来实现,这两个方法单独来看就是在创建一个对象,这符合工厂模式的定义。 -至于创建对象的家族这一概念是在 Client 体现,Client 要通过 AbstractFactory 同时调用两个方法来创建出两个对象,在这里这两个对象就有很大的相关性,Client 需要这两个对象的协作才能完成任务。 +至于创建对象的家族这一概念是在 Client 体现,Client 要通过 AbstractFactory 同时调用两个方法来创建出两个对象,在这里这两个对象就有很大的相关性,Client 需要同时创建出这两个对象。 从高层次来看,抽象工厂使用了组合,即 Cilent 组合了 AbstractFactory ,而工厂模式使用了继承。