代码改变世界

工厂设计模式

2017-07-07 15:33  grows  阅读(152)  评论(0编辑  收藏  举报

---恢复内容开始---

1.     开始时使用对象是每个客户端自己创建的,所以对象的创建和客户之间存在着高耦合关系。例如:

在很久以前,人们需要穿衣服,需要自己去织布,设计样式,剪裁,最后成衣服。衣服的制造和使用者紧紧的联系在一起。如果自己不去做就没有衣服穿。

 

客户自己创建裤子和上衣,客户和裤子/上衣之间时依赖关系。

带箭头的虚线(dependency):依赖

2.     人们每天花很多时间都在不停的做衣服,那么有没有一个地方可以专门做衣服呢?不如成立一家工厂来生产衣服,我们需要的时候就来拿就行了。这样就形成了简单工厂模式

(一个抽象的产品能生产多种具体的产品,每个工厂能生产多种具体的产品)

一个工厂来生产多种不同的产品,而多种不同的产品有一个抽象接口来代表这些产品。

 

衣服是上衣和裤子的接口,带箭头的实线(realization): 实现

客户输入自己想要的衣服,通过工厂类制造出来,给客户

此时如果有人需要衣服的话,直接说自己想要什么样的衣服,工厂生产给他,当又出现了另外不同类型的衣服时,就直接去实现衣服类就行了,但是此时必须要修改工厂里面的代码让其能够去生产这种衣服,这时候就违反了开闭原则(对扩展开发,对修改关闭)

3.     那么怎样在不改变原来的工厂的同时,添加不同的衣服类型,就自动的可以生产呢?那么就把原来的工厂变成一个抽象的吧!在它下面创建不同的工厂分别来生产不同的衣服,

这是就产生了工厂方法模式(一个抽象的产品能生产多种具体的产品,

一个抽象工厂对应多个具体的工厂,

每个具体的工厂只能生产一种具体的产品,)

 

一个抽象工厂,其中有个生产衣服的方法,而具体的工厂生成具体的衣服,这样遵循了开闭原则:添加新的产品,不用去修改factory内部代码,只用去扩展工厂类即可。

 

 

 

 

 

 

4.     但是随着人们生活水平的提高,衣服的样式越来越花哨,一件衣服不仅仅有布组成,还有小花,珠子等。而不同的衣服的布 小花 珠子还不一样,那么所创建的具体的工厂也越来越多,各种各样的产品造成了极大的混乱,那么我们可以不可以让每个具体的工厂生产对应衣服需要的不同原料呢,例如:具体的小花,具体的珠子了,这是就产生了抽象工厂模式

(多个抽象产品能够生产多种具体的产品,

一个抽象工厂能够对应多个具体的工厂

一个工厂能够生产多种具体的产品)

 

工厂A生产上衣,上衣有红花和小珠子等组成,工厂B生产裤子,裤子是由蓝花和大珠子等组成,一个具体的工厂能生产出多个不同的具体的产品。

 

总结:

工厂模式主要时为了解决耦合的问题。

 

简单工厂模式是工厂方法模式的一个特例,但是它是静态的

(一个抽象产品产生多个具体的产品,一个工厂类生产多个具体的产品)

 

工厂方法模式涉及的是一个产品类

(一个抽象产品产生多个具体的产品,一个抽象工厂类产生多个具体的工厂类,每个具体的工厂类只能生产出一个具体的产品)

抽象工厂模式是涉及多个产品类,当涉及到一个产品是就成了工厂方法模式

(多个抽象产品产生多个具体的产品,一个抽象工厂类产生多个具体的工厂类,每个具体的工厂类能生产出多个具体的产品)

实例:

具体运用实例还需要多琢磨琢磨

 

 

---恢复内容结束---