Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 143|回复: 0

实例化对象模式(工厂模式)

[复制链接]

0

主题

0

帖子

34

积分

新手上路

Rank: 1

积分
34
发表于 2018-4-7 16:28:00 | 显示全部楼层 |阅读模式

Factory Pattern工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。使用工厂模式可能会多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
二、工厂模式的分类
1.简单工厂模式
2.工厂方法模式
3.抽象工厂模式
三、简单工厂模式
1.父类产品
·  2. A B C 三种子类产品
3、创建产品的工厂类

工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象。
4、比较普通创建对象的方法和测试简单工厂方法

5.小结简单工厂
简单工厂的所有产品都是在一个工厂生产的,通过在构造时判断传入的参数不同来生产不同的产品,这种模式会随着产品的增加而越来越庞大,每次新增产品都要添加修改判断条件,即修改工厂类,给维护和扩展带来不便。并且一但工厂类中出错,所有产品都无法创建了。
四、工厂方法模式
1.抽象产品工厂类
工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
1 /**2 * 抽象产品工厂类3 * Product为抽象产品4 */5 public abstract class Factory {6 abstract Product create();7 }2.具体的A、B工厂类
2个工厂都继承抽象工厂类,它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。

3.抽象产品接口
它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
1 /**2 * 抽象产品接口3 */4 public interface Product {5 void method();6 }4.具体产品类
A、B 产品都实现抽象产品接口
5.测试工厂方法
6.小结工厂方法
工厂方法模式是简单工厂模式的进一步抽象化和推广,工厂方法模式里不再只由一个工厂类决定那一个产品类应当被实例化,这个决定被交给抽象工厂的子类去做。工厂方法模式实现了不同产品在不同工厂生产,维护和扩展比简单工厂模式好,即使一个产品出现问题,其他产品也可以正常生产。
五、抽象工厂模式
1.抽象工厂类
A1和B1是一个产品族,由具体工厂1生产;A2和B2是一个产品族,由具体工厂2生产

3.抽象产品接口
抽象产品A接口
1 /**2 * 抽象产品A接口3 */4 public interface ProductA {5 }抽象产品B接口
1 /**2 * 抽象产品B接口3 */4 public interface ProductB {5 }4.具体产品
具体产品A1,实现抽象产品A接口
具体产品A2,实现抽象产品A接口
具体产品B1,实现抽象产品B接口
具体产品B2,实现抽象产品B接口
5.测试抽象工厂
6.小结
抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。
六、总结
简单工厂 : 用来生产同一等级结构中的任意产品,即所有产品由一个工厂生产,当需要添加新产品时,需要修改工厂类,不易扩展。
工厂方法 :用来生产同一等级结构中的固定产品,即不同的产品由不同的工厂生产,添加新产品只需要添加新工厂,更容易扩展,不过如果同一级产品有多个,会产生很多平行的工厂。
抽象工厂 :用来生产不同产品族的全部产品,即一个工厂生产一个产品族,每个产品族都是多个产品的同一级结构。
以上三种工厂 方法在等级结构和产品族这两个方向上的支持程度不同。所以要根据情况考虑应该使用哪种方法。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Comsenz Inc.  

GMT+8, 2018-6-20 12:08 , Processed in 1.473517 second(s), 16 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表