博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-工厂模式简单理解
阅读量:6696 次
发布时间:2019-06-25

本文共 1505 字,大约阅读时间需要 5 分钟。

产品接口:Product  产品实现类:ProductA,ProductB

当你需要根据条件A和B来分别创建产品时,就可以把if else放到一个类SimpleFacotory中的createProduct方法中,如下

SimpleFactory{  public Product create(Type){    if(A) return new ProductA();    if(B) return new ProductB();   }}Client:  Product  A= new SimpleFactory().create(A); //当用户需要创建A类型的产品时,调用工厂的create方法

这就叫简单工厂:一个工厂对象,一个create方法实现所有Product的创建。

这时候需求变了,用户要求创建A B C D E F Porduct,可能还要增加....X Y Z Product,原来的类经过测试了不要再修改。不让SimpleFactory修改?不干了,你们自己创建自己的产品,SimpleFactory罢工了!

那只能自己创建自己的产品了,

class FactoryA implement Factory{  public Product create(){    return new ProductA();  }}class FactoryB implement Factory{  public Product create(){    return new ProductB();  }}class FactoryC implement Factory...Client:  Factory f = new FactoryA();  //当用户需要创建A类型的产品时,先创建A工厂  f.create();

 

这时候需求又变了 ,生产Product的同时还要生产它的附加产品Additional,而且Additional的实现类还会和Product一起不断增加,怎么办?每个Additional再创建一个工厂吗?这样类太多了!

分类吧,我们知道ProductA和AdditionalA可以放在一起,ProductB和AdditionalB可以放在一起.....,于是:

class FactoryA implement Factory{  public Product createProduct(){    return new ProductA();  }  public Product createAdditional(){    return new AdditionalA();  }}class FactoryB implement Factory{  public Product createProduct(){    return new ProductB();  }  public Product createAdditional(){    return new AdditionalB();  }} ...Client:  Factory f = new FactoryA();  //当用户需要创建A系列的产品时,先创建A工厂  f.createProduct();  f.createAdditional();

这样,当增加新的Product和Additionall系列时,我们创建一个工厂就行了,起码比工厂方法模式减少了一倍。

 

 

 

转载于:https://www.cnblogs.com/onetwothree/p/10120869.html

你可能感兴趣的文章
.NET二级域名共享Session
查看>>
[汇编] 比较2个字符串是否相等
查看>>
CutJS – 用于 HTML5 游戏开发的 2D 渲染引擎
查看>>
jquery easy ui 学习 (3) window 限制在父类窗体内
查看>>
lightswitch 添加 TreeView 控件
查看>>
积累的VC编程小技巧之文件操作
查看>>
javascript 文件的同步加载与异步加载
查看>>
【struts2】Struts2的运行流程
查看>>
阻止函数源码在控制台输出
查看>>
php递归无限极分类
查看>>
”凉凉“ 的故事
查看>>
Java对数组的操作(二)——集合与数组的切换
查看>>
VS2010皮肤控件介绍
查看>>
编译Ngnix遇到的问题,查看程序依赖的库文件
查看>>
ViewBag 找不到编译动态表达式所需的一种或多种类型,是否缺少引用?
查看>>
前端翻译:Activating Browser Modes with Doctype
查看>>
软考复习之路—组成原理
查看>>
arrayPointer
查看>>
Android SDK开发包国内下载地址
查看>>
浅谈尾递归
查看>>