简单工厂(SimpleFactory)

  • 概念:
    • 为什么工厂模式是如此常用?
    • 解决方案【步骤】
      • 实现类图
      • 示例:

概念:

关键字:【多选一】

问题:客户在使用对象时,面临在多个类型中选择一个类创建对象,具体对象的类型可能有变化。

意图:定义一个全局的工厂类,负责类型的选择及对象的创建初始化,从而实现将创建与表示分离。

适用性:
当一个类不知道它所必须创建的对象的类的时候,当类将创建对象的职责委托给一个全局创建点,客户不需要关心具体类型,需要对象的时候,找全局创建点即可。工厂可以根据需要动态创建不同的对象的接口类或方法,这些对象往往有共同的父接口或父类,工厂模式是我们最常用的模式,在大部分程序系统中都在大量运用。

为什么工厂模式是如此常用?

因为工厂模式就相当于创建实例对象的new

1.我们经常要根据类生成实例对象
2.工厂模式也是用来创建实例对象的
使用工厂模式,可能多做一些工作,但会给系统带来更大的复用性和可维护性

工厂模式:
1》工厂方法(Factory Method)
2》抽象工厂(Abstract Factory)

这两个模式:

1.共性:是对象的创建与使用进行了分离
2.不同:

  • 工厂方法:一次只能创建一个对象

  • 抽象工厂:一次创建一系列相互依赖的对象

工厂方法设计模式
问题【需求,功能】
当需要根据不同的条件产生不同的对象时,
当然这些不同的对象类型不同,却具有共同的父类

解决方案【步骤】

1)创建父类产品以及所有的子类产品
2)创建一个工厂类,在工厂类中定义一个方法即工厂方法
3)实现工厂方法,即根据不同的条件创建并返回不同的对象

优点:

  • 工厂依赖于所有的子类产品,工厂是整个模式的核心,以不变应万变
  • 工厂方法把创建对象的具体过程封装了,客户只需知道父类产品和工厂即可.

它使对象的创建与使用进行了分离:

  1. 简化了客户端的应用,也改善了程序的扩展性,
  2. 使得将来可以做最小的改动就可以加入新的待创建的类.

实现类图

本例以中文命名类名,方法名,是为了便于学习理解,实际工作并不建议编程以中文命名。

示例:

先创建一个接口类型

public interface 饭
{void 吃到了();
}

创建枚举类型

public enum 饭的类型
{米饭,火锅,面条,
}

再创建接口里的实现类

using System;public class 火锅 : 饭
{public void 吃到了(){Console.WriteLine("吃到了火锅!");}
}
using System;public class 米饭 : 饭
{public void 吃到了(){Console.WriteLine("吃到了米饭!");}
}
using System;public class 面条 : 饭
{public void 吃到了(){Console.WriteLine("吃到了面条!");}
}

创建一个工厂,生成基于给定信息的实体类的对象。

public class 饭店Factory
{public 饭 吃什么(饭的类型 eat){switch (eat){case 饭的类型.火锅:return new 火锅();case 饭的类型.面条:return new 面条();case 饭的类型.米饭:return new 米饭();}return null;}
}

测试示例

using System;class Program
{static void Main(string[] args){饭店Factory 饭店 = new 饭店Factory();饭店.吃什么(饭的类型.火锅).吃到了();饭店.吃什么(饭的类型.面条).吃到了();Console.Read();}
}

输出示例图

设计模式------首页

设计模式(3)----- 简单工厂模式相关推荐

  1. php的类图怎么生成_PHP设计模式之简单工厂模式

    PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...

  2. C#设计模式(2)——简单工厂模式

    一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂 ...

  3. 工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)

    简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧.为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习. 1  场景问题 ...

  4. .NET设计模式(1): 简单工厂模式

    .NET设计模式(1): 简单工厂模式 最近一直在看设计模式,想把自己的学习笔记与大家分享一下,如果能帮助大家的话,我会非常高兴,同时也欢迎大家指出里面的不足.园子里其实关于此类文章已经很多了,如果d ...

  5. JS常用的设计模式(2)——简单工厂模式

    JS常用的设计模式(2)--简单工厂模式 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定 ...

  6. 设计模式之简单工厂模式(C#版)

    设计模式之简单工厂模式(C#版) 简介 假设有个女朋友 总结 简介 我用最简洁而直接的方式来描述一下,什么是简单工厂模式.一句话就是,工厂类使用switch case语句返回特定类型. 下面,我们用一 ...

  7. 大牧絮叨设计模式:简单工厂模式

    文章目录 1. 简单工厂模式概述 1.1.简单工厂模式核心组件 1.2.简单工厂模式优缺点 2.` Java`实现 公共父类定义 产品具体实现类 简单工厂定义 代码运行测试: 3. `Python`实 ...

  8. 设计模式之简单工厂模式(Java 实现)

    设计模式之简单工厂模式(Java 实现) 本文首发于http://www.imooc.com/wiki/Designlesson/factory.html 简单工厂模式是平时开发过程中最常见的设计模式 ...

  9. 设计模式之简单工厂模式

    一.概述 工厂模式具体包括了简单工厂.工厂方法.抽象工厂,它们是按照从简单到复杂的顺序排列的,属于设计模式中的创建型,其中简单工厂并不属于GOF的23中模式.   但是它是理解其它的工厂模式的一个很好 ...

  10. 设计模式之简单工厂模式(Simply Factory)摘录

    从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种 ...

最新文章

  1. 协方差矩阵的概念,算法以及自己的一些理解
  2. java 用sevlet实现ip定位以及天气预报的功能
  3. webpack4配置基础
  4. Scala函数式对象-有理数
  5. 1到n阶乘算法的改进
  6. mysql约束类型 A P_mysql笔记: 数据类型、约束、范式
  7. Magento中调用JS文件的几种方法
  8. jQuery中Ajax+Spring MVC实现跨域请求
  9. windows下安装php5.5的redis扩展
  10. 2015最新Android学习线路图
  11. 菜鸟学Linux 第030篇笔记 yum使用,源码编译安装
  12. 从零基础入门Tensorflow2.0 ----八、42. 自定义流程
  13. ARM汇编指令MCR/MRC学习
  14. windows安装docker环境并配置镜像
  15. html坦克游戏,HTML5实现经典坦克大战坦克乱走还能发出一个子弹
  16. 第一行代码 Hello world
  17. java计算机毕业设计家庭记账系统源码+数据库+系统+lw文档+mybatis+运行部署
  18. pip镜像网站及使用方法
  19. TI | TM4C123Gx单片机之---ADC笔记
  20. Prometheus监控学习笔记之Prometheus普罗米修斯监控入门

热门文章

  1. WHISTLE特征提取
  2. Python自动化第二周之数据模块
  3. 【怎么突破安全狗和360网站卫士的】
  4. Revit中视图范围的应用及快速批量视图命名
  5. FusionConpute虚拟机的发放与管理
  6. 艾美捷针对性检测—游离维多珠单抗ADA水平检测试剂盒
  7. Excel VBA自动化办公:选择Excel文件合并订单数据生成订单汇总表、生成发货单并导出pdf文件、自动统计业绩生成业绩表
  8. Android: Jetpack Compose如何禁用涟漪(水波纹)效果
  9. DZ先生怪谈国标28181之大型监控组网ntpd校时方案
  10. Python遍历字典的几种方式