简单工厂(Simple Factory)模式

Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法。

Simple Factory模式实际上不是GoF 23个设计模式中的一员。

二、 Simple Factory模式角色与结构:

工厂类角色Creator (LightSimpleFactory):工厂类在客户端的直接控制下(Create方法)创建产品对象。

抽象产品角色Product (Light):定义简单工厂创建的对象的父类或它们共同拥有的接口。可以是一个类、抽象类或接口。

具体产品角色ConcreteProduct (BulbLight, TubeLight):定义工厂具体加工出的对象。

三、 程序举例:

using System;public abstract class Light
{public abstract void TurnOn();public abstract void TurnOff();
}public class BulbLight : Light
{public override void TurnOn(){Console.WriteLine("Bulb Light is Turned on");}public override void TurnOff(){Console.WriteLine("Bulb Light is Turned off");}
}public class TubeLight : Light
{public override void TurnOn(){Console.WriteLine("Tube Light is Turned on");}public override void TurnOff(){Console.WriteLine("Tube Light is Turned off");}
}public class LightSimpleFactory
{public Light Create(string LightType){if (LightType == "Bulb")return new BulbLight();else if (LightType == "Tube")return new TubeLight();elsereturn null;}
}public class Client
{public static void Main(){LightSimpleFactory lsf = new LightSimpleFactory();Light l = lsf.Create("Bulb");l.TurnOn();l.TurnOff();Console.WriteLine("-----------------");l = lsf.Create("Tube");l.TurnOn();l.TurnOff();}
}

四、 Simple Factory模式演化

Simple Factory模式演化(一)

除了上面的用法外,在有些情况下Simple Factory可以由抽象产品角色扮演,一个抽象产品类同时是子类的工厂。

程序举例:

using System;public class Light
{public virtual void TurnOn(){}public virtual void TurnOff(){}public static Light Create(string LightType){if (LightType == "Bulb")return new BulbLight();else if (LightType == "Tube")return new TubeLight();elsereturn null;}
}public class BulbLight : Light
{public override void TurnOn(){Console.WriteLine("Bulb Light is Turned on");}public override void TurnOff(){Console.WriteLine("Bulb Light is Turned off");}
}public class TubeLight : Light
{public override void TurnOn(){Console.WriteLine("Tube Light is Turned on");}public override void TurnOff(){Console.WriteLine("Tube Light is Turned off");}
}public class Client
{public static void Main(){Light l = Light.Create("Bulb");l.TurnOn();l.TurnOff();Console.WriteLine("-----------------");l = Light.Create("Tube");l.TurnOn();l.TurnOff();}
}

Simple Factory模式演化(二)

三个角色全部合并:

与单件模式(Singleton)相近,但是有区别。

五、 优点与缺点:

优点:
工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅"消费"产品。简单工厂模式通过这种做法实现了对责任的分割。

缺点:
当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

同时,系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂。

另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。

转载于:https://www.cnblogs.com/guojingyang/archive/2008/12/03/1346506.html

简单工厂模式:Simple Factory Pattern(转自阿良.NET)相关推荐

  1. Net设计模式之简单工厂模式(Simple Factory Pattern)

    一.简单工厂模式简介(Bref Introduction)        简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实 ...

  2. 简单工厂模式-Simple Factory Pattern 工厂三兄弟之简单工厂模式(四):图表库解决方案的改进,简单工厂模式的简化,简单工厂模式总结

    4 方案的改进 Sunny软件公司开发人员发现在创建具体Chart对象时,每更换一个Chart对象都需要修改客户端代码中静态工厂方法的参数,客户端代码将要重新编译,这对于客户端而言,违反了" ...

  3. Java设计模式之简单工厂模式(Simple Factory)

    [Java与模式]简单工厂模式(Simple Factory---吴义) 首先说明,Java与模式一系列的文章均是参考阎宏博士的<Java与模式>一书,加上自身的一些体会的探索,产生如下文 ...

  4. 从零开始学设计模式(四):工厂模式(Factory Pattern)

    作者平台: | CSDN:blog.csdn.net/qq\_4115394- | 掘金:juejin.cn/user/651387- | 知乎:www.zhihu.com/people/1024- ...

  5. 设计模式的征途—2.简单工厂(Simple Factory)模式

    工厂模式是最常用的一种创建型模式,通常所说的工厂模式一般是指工厂方法模式.本篇是是工厂方法模式的"小弟",我们可以将其理解为工厂方法模式的预备知识,它不属于GoF 23种设计模式, ...

  6. 简单工厂(Simple Factory)模式

    简单工厂(Simple Factory)模式 Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个公共的父类和公共的方法. Simple Fact ...

  7. 【设计模式】工厂模式(Factory Pattern)

    1. 概述 工厂模式(Factory Pattern)是最常用的设计模式之一,它属于创建类型的设计模式.它提供了一种创建对象的最佳方式,在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通 ...

  8. 抽象工厂模式-Abstract Factory Pattern

    抽象工厂模式-Abstract Factory Pattern 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类.抽 ...

  9. 【设计模式】抽象工厂模式 Abstract Factory Pattern

    简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...

  10. 设计模式——工厂模式(Factory Pattern)

    设计模式--工厂模式(Factory Pattern) 工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式.该 ...

最新文章

  1. 别让低效努力,毁了你
  2. Machine Learning | (11) 回归性能评估与欠拟合、过拟合
  3. 17.04安装mysql_【17-04-11】 【求助】在线安装mysql时出现问题
  4. 美国汽车协会实测:行人检测系统都是渣渣,包括特斯拉
  5. Spring4.X系列之AOP-@AspectJ
  6. WebBrowser内存泄露
  7. input内的字体颜色_嘉兴市硅胶喷涂颜色油订制
  8. python决策树 value_机器学习 | 算法笔记(四)- 决策树算法以及代码实现
  9. 在codeigniter中使用Cache_Lite来缓存
  10. Zen Cart 常用SQL命令
  11. 阿根廷点杀荷兰,24年后再进决赛
  12. 不使用ArcObjects直接查找SDE数据库信息
  13. 简单理解-Head First 设计模式
  14. linux源码(含有kfifo)下载
  15. Win11系统pin码忘记了怎么办?Win11忘记pin码解决方法
  16. 用python批量处理图片_Python学习九十三天:Python批量处理图片
  17. 红牛v5 android cm12.1 分辨率修改
  18. 技术分享:用JS实现的3D海浪涌动特效
  19. 怎么查计算机上c盘的历史记录,如何查看电脑历史操作记录
  20. [Mysql]查看mysql默认密码

热门文章

  1. Dropout也能自动化了,谷歌Quoc Le等人利用强化学习自动找寻模型专用Dropout
  2. 一文入门基于三维数据的深度学习
  3. 2019 sample-free(样本不平衡)目标检测论文阅读笔记
  4. 自学Python能干些什么副业
  5. mysql5.7单表最大容量_mysql 5.7单表300万数据,性能严重下降,如何破?
  6. 【TensorFlow】TensorFlow函数精讲之tf.constant()
  7. 计算机视觉中的Transformer的最新进展!
  8. 学术前沿 | Texar-PyTorch:在PyTorch里重现TensorFlow的最佳特性
  9. 基础知识(十三)dlib python人脸检测 特征点定位
  10. 等式与不等式约束的序列二次规划(SQP)