您的位置:首页 > 其它

【设计模式】设计模式之工厂模式

2014-04-25 07:57 211 查看
工厂方法模式->创建模式

使用场景?
作用?
代码形态?

场景:大量类似的实体类;要创建的实体类都是同一本质的东西(披萨);有部分类似功能(准备、烘烤、切法);实现方式不一样(准备的材料不同、烘烤时间不同、切法不同);将繁琐复杂的创建类的过程聚集在一起,有序清晰;把具体实例化的过程从客户代码中抽离;

作用:

1、将创建对象的代码集中在一起,便于管理(工厂类中创建类的方法)
2、依赖接口,而不是具体类(披萨抽象类)
3、针对接口编程,而不是针对实现编程(披萨抽象类、创建者基类)

简单工厂方法模式 又称静态工厂方法模式;

简单工厂模式中的工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化



简单工厂方法模式,分由3部分组成:工厂类,抽象产品,具体产品。

工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

工厂定义成静态方法:不需要创建对象的方法来实例化对象;不能通过继承来改变创建方法的行为

工厂方法模式:

定义了一个创建对象的接口,但由自子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。





工厂方法模式由4部分组成:抽象工厂,具体工厂,抽象产品,具体产品

抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

抽象工厂方法模式
提供一个借口, 用于创建相关或依赖对象的家族,而不是需要明确指定具体类。





我的理解:



日常场景:在一个蛋挞店(多种蛋挞提供、蛋挞制作步骤一样,原料不一样):

简单工厂方法模式:
服务生接受客户订单(参数),【服务生根据(参数)自己做】,自己提供给客户
工厂方法模式:

服务生接受客户订单{某某蛋挞},【服务生根据订单{某某蛋挞}交给专门制作此类蛋挞的师傅,师傅制作蛋挞{一般时候该师傅只做这一种蛋挞,不要参数},交给服务生】,服务生提供给客户

抽象工厂方法模式:

服务生接受客户订单{某某蛋挞,加不加何种水果丁},【服务生根据订单{某某蛋挞}交给专门制作此类蛋挞的师傅,师傅制作蛋挞{一般时候该师傅只做这一种蛋挞,不要参数},根据{
,何种水果丁}制作水果丁{一般时候该师傅只做这一种水果丁,不要参数},交给服务生】,服务生提供给客户

ps:产品族就是该蛋挞的一系列,加不加水果丁,加不加其他配料

简单工厂与工厂方法之间的区别:

1.简单工厂是一种has-a的关系,所有的产口是由店铺中的一个工厂成员所创建的。而工厂方法是一种is-a的关系,它把创建产品的事情留给了工厂方法的子类去决定如何创建。
2. 简单工厂把全部的事情,在一个地方都处理完了,然而工厂方法却是创建一个框架,让子类决定要如何实现。
3. 简单工厂的做法,可以将对象的创建封装起来,但是简单工厂不具备工厂方法的弹性,因为简单工厂不能变更正在创建的产品。

抽象工厂模式与工厂方法模式的区别
抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: