简单工厂模式Simple Factory根据提供给它的数据,返回一个类的实例。通常它返回的类都有一个公共的父类(或者接口对象)。

简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。简单工厂实例化的类具有相同的接口或者基类,在子类比较固定并不需要扩展时,可以使用简单工厂。如数据库生产工厂就是简单工厂的一个应用。
         采用简单工厂的优点是可以使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性;缺点是可实例化的类型在编译期间已经被确定,如果增加新类 型,则需要修改工厂,不符合OCP(开闭原则)的原则。简单工厂需要知道所有要生成的类型,当子类过多或者子类层次过多时不适合使用。

下面是我实例中的类结构图,它有一个ICreate的公共接口,有一个方法叫Create,返回值为Void

aaarticlea/png;base64,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" alt="" />

其中公用的接口代码如下:(最后工厂的返回值类型)

1    /// <summary>
/// 简单工厂接口,返回值类型
/// </summary>
4 public interface ICreate
5 {
6 void Create();
7 }

而下面,分别用people和animal两个类去实现了ICreate接口,并实现了它的Create方法。

 
 1      /// <summary>
/// 人类实现工厂接口
/// </summary>
4 public class People : ICreate
5 {
6
7 #region ICreate 成员
8
9 public void Create()
10 {
11 Console.WriteLine("创建人类");
12 }
13
14 #endregion
15 }
16 /// <summary>
/// 动物实现工厂接口
/// </summary>
19 public class Animal : ICreate
20 {
21
22 #region ICreate 成员
23
24 public void Create()
25 {
26 Console.WriteLine("创建动物");
27 }
28
29 #endregion
30 }
 

而对于外界来说,会有另一个类去为外界提供服务,它们可以需要建立People或者Animal类型的实现,代码如下:

 1     public class CreateFactory
2 {
3 public static ICreate GeneratorCreate(string createName) {
4 switch (createName)
5 {
6 case "People":
7 return new People();
8 case "Animal":
9 return new Animal();
10 default:
11 throw new NotImplementedException();
12 }
13 }

最后,在使用它时,直接使用CreateFactory.GeneratorCreate("类型条件名")即可生成你的类对象了。

以上内容转自 张占岭

设计模式~简单工厂模式(Factory)的更多相关文章

  1. Golang设计模式—简单工厂模式(Simple Factory Pattern)

    Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...

  2. 3. 星际争霸之php设计模式--简单工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  3. 深入浅出设计模式——简单工厂模式(Simple Factory)

    介绍简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些.因为它至少不是Gof23种设计模式之一.但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导,所以我想 ...

  4. 设计模式 | 简单工厂模式(static factory method)

    按理说应该把书全都看完一遍,再开始写博客比较科学,会有比较全面的认识. 但是既然都决定要按规律更新博客了,只能看完一个设计模式写一篇了. 也算是逼自己思考了,不是看完就过,至少得把代码自己都敲一遍. ...

  5. python 设计模式之工厂模式 Factory Pattern (简单工厂模式,工厂方法模式,抽象工厂模式)

    十一回了趟老家,十一前工作一大堆忙成了狗,十一回来后又积累了一大堆又 忙成了狗,今天刚好抽了一点空开始写工厂方法模式 我看了<Head First 设计模式>P109--P133 这25页 ...

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

    定义:定义一个工厂类,它可以根据参数的不同返回不同类型的实例,被创建的实例通常有公共的父类. 模式类型:创建型模型 Factory(工厂角色):即工厂类,负责实现创建所有产品实例的内部逻辑:工厂类可以 ...

  7. Java设计模式-简单工厂模式(Static Factory Method)

    简单工厂模式(Static Factory Method) 简单工厂模式是类的创建模式,又叫静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种 ...

  8. C++设计模式——简单工厂模式

    简单工厂模式(Simple Factory Pattern) 介绍:简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些.因为它至少不是Gof23种设计模式之一.但它在实际的编程中经常被用 ...

  9. 设计模式之工厂模式(Factory)

    设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...

随机推荐

  1. 使用本函式处理后的字串会沿续到PHP程式而转入eval函数

    html码放在数据库里,通过php文件调用,经过一系列处理后,用eval函数 将希望的变量带入生成所需要的动态页.这样,我就没再看vbb源码,而转入eval函数了. 星空浪子的php中文手册是这样介绍 ...

  2. POJ 1185 经典状压dp

    做了很久的题 有注释 #include<stdio.h> #include<string.h> #include<algorithm> #include<ma ...

  3. context:component-scan 分析

    <context:component-scan> Web.xml中 <servlet> <servlet-name>springMVC</servlet-na ...

  4. Apache Spark源码走读之21 -- WEB UI和Metrics初始化及数据更新过程分析

    欢迎转载,转载请注明出处,徽沪一郎. 概要 WEB UI和Metrics子系统为外部观察监测Spark内部运行情况提供了必要的窗口,本文将简略的过一下其内部代码实现. WEB UI 先上图感受一下sp ...

  5. 【Fate/kaleid liner 魔法少女☆伊莉雅】系列中实践的、新世代的动画摄影工作流

          通常的日本动画的摄影中,是以追加Cell(celluloid 赛璐珞)与背景的合成滤镜处理为主,而在[Fate/kaleid liner 魔法少女☆伊莉雅]系列的,加入了自己使用3DCG软 ...

  6. TabHost详解

    [转]http://blog.csdn.net/harvic880925/article/details/17120325 前言:今天仔细研究了下TabHost,主要是为了实现微信底部导航栏的功能,最 ...

  7. Java Web项目调优原则

    1. 根据oracle生成的awr文件排除是否是数据库或者sql问题 2.配置中间件的dump文件路径,gc log文件路径 3.通过 MemoryAnalyzer 分析 dump文件 4.通过exc ...

  8. Merge用法

    Merge用来从一个表中选择一些数据更新或者插入到另一个表中.而最终是用更新还是用插入的方式取决于该语句中的条件. 下面我们简单的举一个例子:   SQL> create table merge ...

  9. [troubleshoot][archlinux][X] plasma(KDE) 窗口滚动刷新冻结(约延迟10s)(已解决,root cause不明,无法再次复现)

    现象: konsole,setting等plasma的系统应用反应缓慢,在滚动条滚动时,尤为明显. 触发条件: 并不是十分明确的系统滚动升级(Syu)后,产生. 现象收集: 可疑的dmesg [ :: ...

  10. LINQ延迟查询的例子

    //linq延迟查询.两次查询结果不同 List<string> l = new List<string>() { "aaa", "bbb&quo ...