auto commit

This commit is contained in:
CyC2018 2018-03-16 23:30:03 +08:00
parent 95f405f74a
commit baa0b51a13

View File

@ -501,7 +501,7 @@ CheesePizza
在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象。
下图中Creator 有一个 anOperation() 方法,这个方法需要用到一组产品类,这组产品类由 factoryMethod() 方法创建。该方法是抽象的,需要由子类去实现。
下图中Creator 有一个 anOperation() 方法,这个方法需要用到一组产品对象,这组产品对象由 factoryMethod() 方法创建。该方法是抽象的,需要由子类去实现。
<div align="center"> <img src="../pics//903093ec-acc8-4f9b-bf2c-b990b9a5390c.jpg"/> </div><br>
@ -617,7 +617,7 @@ ChicagoStyleCheesePizza is making..
**1. 模式定义**
提供一个接口,用于创建 **相关的对象家族** ,而不需要明确指定具体类
提供一个接口,用于创建 **相关的对象家族**
**2. 模式类图**
@ -627,7 +627,7 @@ ChicagoStyleCheesePizza is making..
至于创建对象的家族这一概念是在 Client 体现Client 要通过 AbstractFactory 同时调用两个方法来创建出两个对象在这里这两个对象就有很大的相关性Client 需要同时创建出这两个对象。
从高层次来看,抽象工厂使用了组合,即 Cilent 组合了 AbstractFactory ,而工厂模式使用了继承。
从高层次来看,抽象工厂使用了组合,即 Cilent 组合了 AbstractFactory而工厂模式使用了继承。
<div align="center"> <img src="../pics//0de18cdb-e974-47a3-af47-9538edafe857.png"/> </div><br>
@ -760,7 +760,7 @@ MarinaraSauce
**3. 懒汉式-线程不安全**
以下实现中,私有静态变量被延迟化实例化,这样做的好处是,如果没有用到该类,那么就不会实例化私有静态变量,从而节约资源。
以下实现中,私有静态变量 uniqueInstance 被延迟化实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 uniqueInstance,从而节约资源。
这个实现在多线程环境下是不安全的,如果多个线程能够同时进入`if(uniqueInstance == null)` ,那么就会多次实例化 uniqueInstance。
@ -831,7 +831,7 @@ public class Singleton {
}
```
考虑下面的实现,也就是只使用了一个 if 语句。在 uniqueInstance == null 的情况下,如果两个线程同时执行 if 语句,那么两个线程就会同时进入 if 语句块内。虽然在 if 语句块内有加锁操作,但是两个线程都会执行 `uniqueInstance = new Singleton();`这条语句,只是早晚的问题,也就是说会进行两次实例化,从而产生了两个实例。因此必须使用双重校验锁,也就是需要使用两个 if 判断。
考虑下面的实现,也就是只使用了一个 if 语句。在 uniqueInstance == null 的情况下,如果两个线程同时执行 if 语句,那么两个线程就会同时进入 if 语句块内。虽然在 if 语句块内有加锁操作,但是两个线程都会执行`uniqueInstance = new Singleton();`这条语句,只是早晚的问题,也就是说会进行两次实例化,从而产生了两个实例。因此必须使用双重校验锁,也就是需要使用两个 if 判断。
```java
if (uniqueInstance == null) {
@ -962,7 +962,7 @@ Light is on!
**2. 模式类图**
适配器Adapter组合一个待适配的对象AdapteeAdapter 把操作委托给 Adaptee。
适配器Adapter组合一个适配者AdapteeAdapter 把操作委托给 Adaptee。
<div align="center"> <img src="../pics//253bd869-ea48-4092-9aed-6906ccb2f3b0.jpg"/> </div><br>
@ -1180,11 +1180,11 @@ Tea.addCondiments
**2. 模式类图**
- Aggregate 是聚合类,其中 createIterator() 方法可以产生一个 Iterator 对象
- Aggregate 是聚合类,其中 createIterator() 方法可以产生一个 Iterator
- Iterator 主要定义了 hasNext() 和 next() 方法。
- Client 组合了 Aggregate 对象,为了迭代遍历 Aggregate 对象,也需要组合 Iterator 对象
- Client 组合了 Aggregate为了迭代遍历 Aggregate也需要组合 Iterator。
<div align="center"> <img src="../pics//439deca7-fed0-4c89-87e5-7088d10f1fdb.jpg"/> </div><br>