auto commit
This commit is contained in:
parent
1ed4ef6e7d
commit
3dd3a14385
|
@ -6,7 +6,7 @@
|
|||
* [工厂模式](#工厂模式)
|
||||
* [1. 简单工厂](#1-简单工厂)
|
||||
* [2. 工厂方法模式](#2--工厂方法模式)
|
||||
* [3. 抽象工厂模式](#3--抽象工厂模式)
|
||||
* [3. 抽象工厂模式](#3-抽象工厂模式)
|
||||
* [单件模式](#单件模式)
|
||||
* [命令模式](#命令模式)
|
||||
* [适配器模式](#适配器模式)
|
||||
|
@ -328,7 +328,7 @@ StatisticsDisplay.update:1.0 1.0 1.0
|
|||
|
||||
<div align="center"> <img src="../pics//3dc454fb-efd4-4eb8-afde-785b2182caeb.jpg"/> </div><br>
|
||||
|
||||
**4. 问题解决方案类图**
|
||||
**4. 问题的解决方案类图**
|
||||
|
||||
<div align="center"> <img src="../pics//dac28811-79b6-4b75-bfa7-6b228e8ac3fb.png"/> </div><br>
|
||||
|
||||
|
@ -427,7 +427,7 @@ Pizza 类有很多子类,要求根据不同的情况用不同的子类实例
|
|||
|
||||
<div align="center"> <img src="../pics//ec2f0a65-82ad-4ab9-940f-70ee9f6992cc.png"/> </div><br>
|
||||
|
||||
**3. 解决方案类图**
|
||||
**3. 问题的解决方案类图**
|
||||
|
||||
<div align="center"> <img src="../pics//dc3e704c-7c57-42b8-93ea-ddd068665964.jpg"/> </div><br>
|
||||
|
||||
|
@ -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() 方法创建。该方法是抽象的,需要由子类去实现。
|
||||
|
||||
<div align="center"> <img src="../pics//903093ec-acc8-4f9b-bf2c-b990b9a5390c.jpg"/> </div><br>
|
||||
|
||||
**4. 解决方案类图**
|
||||
**4. 问题的解决方案类图**
|
||||
|
||||
PizzaStore 由 orderPizza() 方法,顾客可以用它来下单。下单之后需要先使用 createPizza() 来制作 Pizza,这里的 createPizza() 就是 factoryMethod(),不同的 PizzaStore 子类实现了不同的 createPizza()。
|
||||
PizzaStore 有 orderPizza() 方法,顾客可以用它来下单。下单之后需要先使用 createPizza() 来制作 Pizza,这里的 createPizza() 就是 factoryMethod(),不同的 PizzaStore 子类实现了不同的 createPizza()。
|
||||
|
||||
<div align="center"> <img src="../pics//cfb05050-47aa-4fd1-86eb-a7c86320f81b.png"/> </div><br>
|
||||
|
||||
|
@ -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 ,而工厂模式使用了继承。
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user