具体实现代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 设计模式实例
{class Program{/// <summary>/// 考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮/// (如圆形按钮、矩形按钮、菱形按钮等), 这些按钮都源自同一个基类,/// 不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,/// 如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,/// 只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法,/// 把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。/// /// </summary>/// <param name="args"></param>static void Main(string[] args){Operation oper;Console.Write("请输入第一个数: ");string strNum1 = Console.ReadLine();Console.Write("请输入操作符(+ - * /): ");string strOperate = Console.ReadLine();oper = OperationFactory.CreateOperate(strOperate);Console.Write("请输入第二个数: ");string strNum2 = Console.ReadLine();oper.Num1 = Convert.ToDouble(strNum1);oper.Num2 = Convert.ToDouble(strNum2);string Result = "";Result = Convert.ToString(oper.GetResult());Console.WriteLine("结果是:" + Result);Console.ReadKey(true);}}/// <summary>/// 就此问题个人理解:/// 1、实现方法:子类继承并重写父类方法,父类只接受处理的事务,而不是自己执行,而是交给///             子类对象去实现,各个对象具有父类共同属性,而执行不同操作/// 2、具体实现:/// 工厂:工厂角色负责实现创建所有实例的内部逻辑/// 抽象产品角色:抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口/// 具体产品角色:具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例/// </summary>/** 说通俗点有点像面向对象编程中的多态性,一个基类,有多个派生类,* 在另外的调用程序中,根据参数来决定返回这个基类的哪个具体的派生类,* 返回值为基类类型,因为基类的引用可以指向派生类对象,* 而且这些所有的派生类都包含有基类的函数,也就是说派生类中有相同的函数* 但是函数的实现可能不同。*/public class OperationFactory{public static Operation CreateOperate(string operate){Operation oper = null;switch (operate){case "+":oper = new OperationAdd();break;case "-":oper = new OperationSub();break;case "*":oper = new OperationMul();break;case "/":oper = new OperationDiv();break;}return oper;}}public class OperationDiv : Operation{public override double GetResult(){try{double result = 0;//            if (Num2 == 0)//                throw new Exception("除数不为0");result = Num1 / Num2;return result;}catch (Exception e){Console.WriteLine(e);throw;}}}public class OperationMul : Operation{public override double GetResult(){double result = 0;result = Num2 * Num1;return result;}}public class OperationSub : Operation{public override double GetResult(){double result = 0;result = Num1 – Num2;return result;}}public class OperationAdd : Operation{public override double GetResult(){double result = 0;result = Num2 + Num1;return result;}}public class Operation{public double Num1 { get; set; }public double Num2 { get; set; }public virtual double GetResult(){double result = 0;return result;}}}

模式分析
•将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来都相对容易。
•在调用工厂类的工厂方法时,由于工厂方法是静态方法,使用起来很方便,可通过类名直接调用,而且只需要传入一个简单的参数即可,在实际开发中,还可以在调用时将所传入的参数保存在XML等格式的配置文件中,修改参数时无须修改任何源代码。
•简单工厂模式最大的问题在于工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,这一点与开闭原则是相违背的。
•简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。

简单工厂模式的优点
•工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。
•客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。
•通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

简单工厂模式的缺点
•由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
•使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。
•系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
•简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

适用环境

在以下情况下可以使用简单工厂模式:
•工厂类负责创建的对象比较少:由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。
•客户端只知道传入工厂类的参数,对于如何创建对象不关心:客户端既不需要关心创建细节,甚至连类名都不需要记住,只需要知道类型所对应的参数。

以上收藏自https://design-patterns.readthedocs.io/zh_CN/latest/index.html,有问题,不吝赐教!

转载于:https://www.cnblogs.com/fenqinearl/p/10704710.html

设计模式整理之简单工厂相关推荐

  1. 23种设计模式 -----Day01:简单工厂模式

    目录 前言 1.设计模式(Design pattern)定义 2.为什么要使用设计模式(使用设计模式的意义) 3.设计原则 a.单一职责原则 b.开放封闭原则 c.里氏代换原则 d.迪米特法则 e.依 ...

  2. 设计模式 笔记4 | 简单工厂模式 在源码中的应用 | Calendar 日历 | 源码浅析 | 使用总结 | 建造者模式

    文章目录 一.Calendar 日历类 1.1 内部属性 1.2 设置时间属性值 1.3 获取时间属性 1.4 使用 Calander 计算时间 二.Calender 类中的设计模式 2.1 简单工厂 ...

  3. 大话设计模式Python实现-简单工厂模式

    简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 下面使用简单工厂模式实现一个简单的四则运算 1 #!/us ...

  4. 手撕设计模式之「简单工厂模式」(Java描述)

    前言 利用简单工厂模式可以实现对象创建和业务逻辑处理的分离,但存在工厂类职责过重,增添新产品违背开闭原则等问题.它不属于GoF 23种设计模式之一,但是它可以作为学习工厂方法模式前的一个很好的引导. ...

  5. 设计模式----2(简单工厂模式的概念,简单工厂模式的实现,简单工厂模式的优缺点)

    简单工厂模式 简单工厂模式的概念 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负 责创建其他类的实例,被创建的实例通常都具有共同的父类. 具体分类 工厂(Creator ...

  6. 设计模式(1):简单工厂模式(Simple Factory Pattern)

    1. 从一个简单的例子开始 在众多的设计原则中,有一条原则是这么说的:要针对接口编程,不要针对实现编程. 针对接口编程的话,可以使用不同的实现类来创建这个对象.比如需要一个List: List< ...

  7. 设计模式工作笔记-简单工厂场景与实现(针对接口编程的设计思想)

    简单工厂:通过接口的方式,把实现和变化隔离 接口编程:是一种特殊的抽象类,是一个纯虚类.通常接口来定义类的外部,就相当于一份契约,其实就是根据外部应用 需要的功能,约定了实现类应该要实现的功能. 软件 ...

  8. Java描述设计模式(02):简单工厂模式

    一.生活场景简介 1.引入场景 订餐流程简单描述 1).食品抽象类,规定食品的基础属性操作 2).鱼类,鸡肉类食品类扩展 3).订餐流程类,根据食品名称,加工指定类型食品 4).模拟客户端预定操作 2 ...

  9. 设计模式学习-简单工厂模式

    模式概述: 专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属 ...

最新文章

  1. 安卓当下最流行的吸顶效果的实现(转)
  2. 怎样冷静地看待“小米智能新品”?
  3. 安装证书服务:为Web站点启用HTTPS
  4. 分享matlab程序之——滤波器篇(高通,低通)
  5. 直播 | 旷视研究院最新理论成果:批归一化和权重衰减的球面优化机制
  6. Andriod Studio两种签名机制V1和V2的区别
  7. 《现代汉语常用字表》(包括常用字和次常用字共3500个)
  8. 2021年青海高考一分一段成绩查询,最新2021年青海高考一分一段公布
  9. C++实现简易五子棋游戏
  10. 二倍图三倍图什么意思_小程序有二倍图三倍图使用的必要吗?
  11. 个人账号密码管理体系(密码篇)
  12. web开发第三方登陆之facebook登陆
  13. Jenkins项目配置-Nodejs项目(Vue框架)-全面
  14. 关于【软件测试-自动化测试之面试技巧和注意事项】——侃侃而谈
  15. python read()读取图片_可以python sitk.ReadImage读取列表/系列图像吗?
  16. rk3288 SDK概览
  17. 编辑视频贴纸软件_视频贴纸软件介绍
  18. 数字图像处理与Python实现笔记之图像小波变换与多分辨率
  19. ssim算法计算图片_图像质量评估算法 SSIM(结构相似性)
  20. html 图片正方形,关于CSS:如何使图像显示为正方形?

热门文章

  1. conversion to dalvik format failed with error 1 解决
  2. 低版本ulibc支持recvmmsg sendmmsg功能
  3. java自定义注解解析及自定义注解
  4. Android 开发, Android 安全 精品资料收集 (持续更新...)
  5. 深入了解以太坊虚拟机第2部分——固定长度数据类型的表示方法
  6. android6.0源码分析之Camera API2.0下的初始化流程分析
  7. Android 开发, Android 安全 精品资料收集
  8. python 求list最小值的索引_【挑战自学Python编程】第六天:前五天都学了啥?
  9. JZOJ 1598. 文件修复
  10. BZOJ 3740. 【TJOI2014】电源插排