auto commit
This commit is contained in:
parent
ce96048880
commit
c7b0547206
|
@ -72,7 +72,6 @@
|
|||
|
||||
<div align="center"> <img src="../pics//d887219c-963a-4392-abe7-d3967546e96d.jpg"/> </div><br>
|
||||
|
||||
|
||||
**6. 模式定义**
|
||||
|
||||
**策略模式** :定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
|
||||
|
@ -194,7 +193,7 @@ FlyBehavior.FlyNoWay
|
|||
|
||||
观察者拥有一个主题对象的引用,因为注册、移除还有数据都在主题当中,必须通过操作主题才能完成相应功能。
|
||||
|
||||
<div align="center"> <img src="../pics//5c558190-fccd-4b5e-98ed-1896653fc97f.jpg"/> </div><br>
|
||||
<div align="center"> <img src="../pics//58b9926c-b56c-42f7-82e3-86aa0c164d0a.jpg"/> </div><br>
|
||||
|
||||
**3. 问题描述**
|
||||
|
||||
|
@ -202,7 +201,7 @@ FlyBehavior.FlyNoWay
|
|||
|
||||
**4. 解决方案类图**
|
||||
|
||||
<div align="center"> <img src="../pics//760a5d63-d96d-4dd9-bf9a-c3d126b2f401.jpg"/> </div><br>
|
||||
<div align="center"> <img src="../pics//73ecb593-664e-490e-80e9-4319773113ef.png"/> </div><br>
|
||||
|
||||
**5. 设计原则**
|
||||
|
||||
|
@ -218,8 +217,6 @@ public interface Subject {
|
|||
}
|
||||
```
|
||||
```java
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class WeatherData implements Subject {
|
||||
private List<Observer> observers;
|
||||
|
@ -336,7 +333,7 @@ StatisticsDisplay.update:1.0 1.0 1.0
|
|||
|
||||
**4. 问题解决方案的类图**
|
||||
|
||||
<div align="center"> <img src="../pics//9c997ac5-c8a7-44fe-bf45-2c10eb773e53.jpg"/> </div><br>
|
||||
<div align="center"> <img src="../pics//dac28811-79b6-4b75-bfa7-6b228e8ac3fb.png"/> </div><br>
|
||||
|
||||
**5. 设计原则**
|
||||
|
||||
|
@ -344,7 +341,7 @@ StatisticsDisplay.update:1.0 1.0 1.0
|
|||
|
||||
**6. Java I/O 中的装饰者模式**
|
||||
|
||||
<div align="center"> <img src="../pics//2a40042a-03c8-4556-ad1f-72d89f8c555c.jpg"/> </div><br>
|
||||
<div align="center"> <img src="../pics//14583c71-8f57-4939-a9fc-065469b1bb7a.png"/> </div><br>
|
||||
|
||||
**7. 代码实现**
|
||||
|
||||
|
@ -427,15 +424,16 @@ public class StartbuzzCoffee {
|
|||
|
||||
**2. 定义**
|
||||
|
||||
简单工厂不是设计模式,更像是一种编程习惯。在实例化一个超类的对象时,可以用它的所有子类来进行实例化,要根据具体需求来决定使用哪个子类。在这种情况下,把实例化的操作放到工厂来中,让工厂类来决定应该用哪个子类来实例化。这样做把客户对象和具体子类的实现解耦,客户对象不再需要知道有哪些子类以及实例化哪个子类。因为客户类往往有多个,如果不使用简单工厂,那么所有的客户类都要知道所有子类的细节,一旦子类发生改变,例如增加子类,那么所有的客户类都要发生改变。
|
||||
简单工厂不是设计模式,更像是一种编程习惯。在实例化一个超类的对象时,可以用它的所有子类来进行实例化,要根据具体情况来决定使用哪个子类。在这种情况下,把实例化的操作放到简单工厂来中,让简单工厂来决定应该用哪个子类来实例化。
|
||||
|
||||
<div align="center"> <img src="../pics//c470eb9b-fb05-45c5-8bb7-1057dc3c16de.jpg"/> </div><br>
|
||||
这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及实例化哪个子类。因为客户类往往有多个,如果不使用简单工厂,所有的客户类都要知道所有子类的细节。一旦子类发生改变,例如增加子类,那么所有的客户类都要发生改变。
|
||||
|
||||
<div align="center"> <img src="../pics//ec2f0a65-82ad-4ab9-940f-70ee9f6992cc.png"/> </div><br>
|
||||
|
||||
**3. 解决方案类图**
|
||||
|
||||
<div align="center"> <img src="../pics//dc3e704c-7c57-42b8-93ea-ddd068665964.jpg"/> </div><br>
|
||||
|
||||
|
||||
**4. 代码实现**
|
||||
|
||||
```java
|
||||
|
@ -496,19 +494,19 @@ CheesePizza
|
|||
|
||||
**2. 模式定义**
|
||||
|
||||
定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
|
||||
定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法让类把实例化推迟到子类。
|
||||
|
||||
**3. 模式类图**
|
||||
|
||||
在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象。下图中,Creator 有一个 anOperation() 方法,这个方法需要用到一组产品类,这组产品类由每个子类来创建。
|
||||
|
||||
可以为每个子类创建单独的简单工厂来创建每一个产品类,但是把简单工厂中创建对象的代码放到子类中来可以减少类的数目,因为子类不算是产品类,因此完全可以这么做。
|
||||
在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象。下图中,Creator 有一个 anOperation() 方法,这个方法需要用到一组产品类,这组产品类由 factoryMethod() 方法创建。该方法是抽象的,需要由子类去实现。
|
||||
|
||||
<div align="center"> <img src="../pics//903093ec-acc8-4f9b-bf2c-b990b9a5390c.jpg"/> </div><br>
|
||||
|
||||
**4. 解决方案类图**
|
||||
|
||||
<div align="center"> <img src="../pics//664f8901-5dc7-4644-a072-dad88cc5133a.jpg"/> </div><br>
|
||||
PizzaStore 由 orderPizza() 方法,顾客可以用它来下单。下单之后需要先使用 createPizza() 来制作 Pizza,这里的 createPizza() 就是 factoryMethod(),不同的 PizzaStore 子类实现了不同的 createPizza()。
|
||||
|
||||
<div align="center"> <img src="../pics//cfb05050-47aa-4fd1-86eb-a7c86320f81b.png"/> </div><br>
|
||||
|
||||
**5. 代码实现**
|
||||
|
||||
|
@ -799,7 +797,6 @@ private static Singleton uniqueInstance = new Singleton();
|
|||
|
||||
双重校验锁先判断 uniqueInstance 是否已经被初始化了,如果没有被初始化,那么才对初始化的语句进行加锁。如果只做一次判断,那么多个线程还是有可能同时进入实例化语句块的,因此需要仅此第二次的判断。
|
||||
|
||||
|
||||
```java
|
||||
public class Singleton {
|
||||
|
||||
|
@ -1480,12 +1477,12 @@ Context 的 request() 方法委托给 State 对象去处理。当 Context 组合
|
|||
```java
|
||||
public interface State {
|
||||
/**
|
||||
* 投入25 分钱
|
||||
* 投入 25 分钱
|
||||
*/
|
||||
void insertQuarter();
|
||||
|
||||
/**
|
||||
* 退回25 分钱
|
||||
* 退回 25 分钱
|
||||
*/
|
||||
void ejectQuarter();
|
||||
|
||||
|
|
BIN
pics/14583c71-8f57-4939-a9fc-065469b1bb7a.png
Normal file
BIN
pics/14583c71-8f57-4939-a9fc-065469b1bb7a.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 122 KiB |
BIN
pics/58b9926c-b56c-42f7-82e3-86aa0c164d0a.jpg
Normal file
BIN
pics/58b9926c-b56c-42f7-82e3-86aa0c164d0a.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 191 KiB |
BIN
pics/73ecb593-664e-490e-80e9-4319773113ef.png
Normal file
BIN
pics/73ecb593-664e-490e-80e9-4319773113ef.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 292 KiB |
BIN
pics/cfb05050-47aa-4fd1-86eb-a7c86320f81b.png
Normal file
BIN
pics/cfb05050-47aa-4fd1-86eb-a7c86320f81b.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 145 KiB |
BIN
pics/dac28811-79b6-4b75-bfa7-6b228e8ac3fb.png
Normal file
BIN
pics/dac28811-79b6-4b75-bfa7-6b228e8ac3fb.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 160 KiB |
BIN
pics/ec2f0a65-82ad-4ab9-940f-70ee9f6992cc.png
Normal file
BIN
pics/ec2f0a65-82ad-4ab9-940f-70ee9f6992cc.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 158 KiB |
Loading…
Reference in New Issue
Block a user