【设计模式】设计模式之工厂模式
2014-04-25 07:57
211 查看
工厂方法模式->创建模式
使用场景?
作用?
代码形态?
场景:大量类似的实体类;要创建的实体类都是同一本质的东西(披萨);有部分类似功能(准备、烘烤、切法);实现方式不一样(准备的材料不同、烘烤时间不同、切法不同);将繁琐复杂的创建类的过程聚集在一起,有序清晰;把具体实例化的过程从客户代码中抽离;
作用:
1、将创建对象的代码集中在一起,便于管理(工厂类中创建类的方法)
2、依赖接口,而不是具体类(披萨抽象类)
3、针对接口编程,而不是针对实现编程(披萨抽象类、创建者基类)
简单工厂方法模式 又称静态工厂方法模式;
简单工厂模式中的工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化
![](http://img.blog.csdn.net/20140425075434890?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcm9uZ2hhbzM1MDg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
简单工厂方法模式,分由3部分组成:工厂类,抽象产品,具体产品。
工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
工厂定义成静态方法:不需要创建对象的方法来实例化对象;不能通过继承来改变创建方法的行为
工厂方法模式:
定义了一个创建对象的接口,但由自子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。
![](file:///C:/Users/ME/AppData/Local/YNote/Data/ronghao3508@163.com/6e315892c15d42949be1003bc2f89ba8/clipboard.png)
![](http://img.blog.csdn.net/20140425075456515?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcm9uZ2hhbzM1MDg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
工厂方法模式由4部分组成:抽象工厂,具体工厂,抽象产品,具体产品
抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
抽象工厂方法模式
提供一个借口, 用于创建相关或依赖对象的家族,而不是需要明确指定具体类。
![](http://img.blog.csdn.net/20140425075525640?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcm9uZ2hhbzM1MDg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](file:///C:/Users/ME/AppData/Local/YNote/Data/ronghao3508@163.com/94b11832f6204fdd9b41cf3dad439534/a3c51d9d31174a7fa2b47721fc4ba265.jpg)
我的理解:
![](http://img.blog.csdn.net/20140425075536062?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcm9uZ2hhbzM1MDg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
日常场景:在一个蛋挞店(多种蛋挞提供、蛋挞制作步骤一样,原料不一样):
简单工厂方法模式:
服务生接受客户订单(参数),【服务生根据(参数)自己做】,自己提供给客户
工厂方法模式:
服务生接受客户订单{某某蛋挞},【服务生根据订单{某某蛋挞}交给专门制作此类蛋挞的师傅,师傅制作蛋挞{一般时候该师傅只做这一种蛋挞,不要参数},交给服务生】,服务生提供给客户
抽象工厂方法模式:
服务生接受客户订单{某某蛋挞,加不加何种水果丁},【服务生根据订单{某某蛋挞}交给专门制作此类蛋挞的师傅,师傅制作蛋挞{一般时候该师傅只做这一种蛋挞,不要参数},根据{
,何种水果丁}制作水果丁{一般时候该师傅只做这一种水果丁,不要参数},交给服务生】,服务生提供给客户
ps:产品族就是该蛋挞的一系列,加不加水果丁,加不加其他配料
简单工厂与工厂方法之间的区别:
1.简单工厂是一种has-a的关系,所有的产口是由店铺中的一个工厂成员所创建的。而工厂方法是一种is-a的关系,它把创建产品的事情留给了工厂方法的子类去决定如何创建。
2. 简单工厂把全部的事情,在一个地方都处理完了,然而工厂方法却是创建一个框架,让子类决定要如何实现。
3. 简单工厂的做法,可以将对象的创建封装起来,但是简单工厂不具备工厂方法的弹性,因为简单工厂不能变更正在创建的产品。
抽象工厂模式与工厂方法模式的区别
抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。
使用场景?
作用?
代码形态?
场景:大量类似的实体类;要创建的实体类都是同一本质的东西(披萨);有部分类似功能(准备、烘烤、切法);实现方式不一样(准备的材料不同、烘烤时间不同、切法不同);将繁琐复杂的创建类的过程聚集在一起,有序清晰;把具体实例化的过程从客户代码中抽离;
作用:
1、将创建对象的代码集中在一起,便于管理(工厂类中创建类的方法)
2、依赖接口,而不是具体类(披萨抽象类)
3、针对接口编程,而不是针对实现编程(披萨抽象类、创建者基类)
简单工厂方法模式 又称静态工厂方法模式;
简单工厂模式中的工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化
简单工厂方法模式,分由3部分组成:工厂类,抽象产品,具体产品。
工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
工厂定义成静态方法:不需要创建对象的方法来实例化对象;不能通过继承来改变创建方法的行为
工厂方法模式:
定义了一个创建对象的接口,但由自子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。
![](file:///C:/Users/ME/AppData/Local/YNote/Data/ronghao3508@163.com/6e315892c15d42949be1003bc2f89ba8/clipboard.png)
工厂方法模式由4部分组成:抽象工厂,具体工厂,抽象产品,具体产品
抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
抽象工厂方法模式
提供一个借口, 用于创建相关或依赖对象的家族,而不是需要明确指定具体类。
![](file:///C:/Users/ME/AppData/Local/YNote/Data/ronghao3508@163.com/94b11832f6204fdd9b41cf3dad439534/a3c51d9d31174a7fa2b47721fc4ba265.jpg)
我的理解:
日常场景:在一个蛋挞店(多种蛋挞提供、蛋挞制作步骤一样,原料不一样):
简单工厂方法模式:
服务生接受客户订单(参数),【服务生根据(参数)自己做】,自己提供给客户
工厂方法模式:
服务生接受客户订单{某某蛋挞},【服务生根据订单{某某蛋挞}交给专门制作此类蛋挞的师傅,师傅制作蛋挞{一般时候该师傅只做这一种蛋挞,不要参数},交给服务生】,服务生提供给客户
抽象工厂方法模式:
服务生接受客户订单{某某蛋挞,加不加何种水果丁},【服务生根据订单{某某蛋挞}交给专门制作此类蛋挞的师傅,师傅制作蛋挞{一般时候该师傅只做这一种蛋挞,不要参数},根据{
,何种水果丁}制作水果丁{一般时候该师傅只做这一种水果丁,不要参数},交给服务生】,服务生提供给客户
ps:产品族就是该蛋挞的一系列,加不加水果丁,加不加其他配料
简单工厂与工厂方法之间的区别:
1.简单工厂是一种has-a的关系,所有的产口是由店铺中的一个工厂成员所创建的。而工厂方法是一种is-a的关系,它把创建产品的事情留给了工厂方法的子类去决定如何创建。
2. 简单工厂把全部的事情,在一个地方都处理完了,然而工厂方法却是创建一个框架,让子类决定要如何实现。
3. 简单工厂的做法,可以将对象的创建封装起来,但是简单工厂不具备工厂方法的弹性,因为简单工厂不能变更正在创建的产品。
抽象工厂模式与工厂方法模式的区别
抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。
相关文章推荐
- 设计模式 之 工厂方法
- 《黑马程序员》 工厂设计模式深入分析
- 设计模式之工厂模式
- Java 设计模式_工厂模式
- (三)Java设计模式之工厂方法模式
- 学习笔记系列之NET设计模式(3):工厂方法(Factory Method)
- 设计模式之工厂模式(一)之简单工厂模式
- iOS开发中的设计模式简单工厂模式
- 23种设计模式(2):工厂方法模式
- 设计模式-工厂三姐妹
- 设计模式杂谈:创建型模式之工厂方法(Factory Method)
- Java设计模式-抽象工厂设计模式
- Spring实现两种设计模式:工厂模式和单态模式
- 设计模式-工厂方法和抽象工厂方法
- 设计模式(一)----简单工厂、工厂方法和抽象工厂区别
- 设计模式(二)工厂模式:3-抽象工厂模式
- 工厂设计模式
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)
- 设计模式之简单工厂,工厂模式,抽象工厂
- java设计模式--简单工厂