工厂方法模式(Factory Method)是一种常用的类创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品

通过工厂方法来解决简单工厂带来的一些弊端

我们都知道,简单工厂最大的弊端就是严重违背了设计模式六大原则中的“单一职责原则”,当然,对于游戏这个门派还是比较稳定的,如果把这个游戏门派换成手机型号的话,那可想而知,动不动就要去修改一下工厂中的方法,而又违背了设计模式六大原则中的“开闭原责”。那么怎么来解决这一类问题呢,工厂方法就可以实现这一点。

核心结构之-抽象工厂

    /// <summary>/// 抽象工厂/// </summary>public interface IFactory{ISects CreateInstance();}

核心结构之-具体工厂

    /// <summary>/// 创建金系门派工厂/// </summary>public class GoldFactory: IFactory{public ISects CreateInstance(){return new Gold();}}

    /// <summary>/// 创建木系门派工厂/// </summary>public class WoodFactory: IFactory{public ISects CreateInstance(){return new Wood();}}

    /// <summary>/// 创建水系门派工厂/// </summary>public class WaterFactory: IFactory{public ISects CreateInstance(){return new Water();}}

核心结构之-抽象产品

    /// <summary>/// 门派接口(抽象产品)/// </summary>public interface ISects{/// <summary>/// 技能/// </summary>void Skill();}

核心结构之-具体产品

    /// <summary>/// 金系门派/// </summary>public class Gold : ISects{public void Skill(){Console.WriteLine("金系门派技能:金光乍现");}}

    /// <summary>/// 木系门派/// </summary>public class Wood : ISects{public void Skill(){Console.WriteLine("木系门派技能:摘叶飞花");}}

    /// <summary>/// 水系门派/// </summary>public class Water : ISects{public void Skill(){Console.WriteLine("水系门派技能:滴水穿石");}}

以上就是核心结构的四个角色,接下来就是调用了。

    try{var goldFactory = new GoldFactory();var gold = goldFactory.CreateInstance();gold.Skill();}catch (Exception ex){Console.WriteLine(ex.Message);}Console.ReadKey();

结果如下:

作为演示项目,这里调用不设计DI,但实际用于项目中时,可以借助DI组件来实现依赖注入。

源代码地址:https://github.com/houzhenhuang/DesignPattern

转载于:https://www.cnblogs.com/hhzblogs/p/10363558.html

设计模式之-工厂方法模式相关推荐

  1. python类是实例的工厂_Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...

  2. 设计模式复习-工厂方法模式

     设计模式复习-工厂方法模式 相对于简单工厂,工厂方法是把算法类的实例化延迟到了调用者那去做,调用者根据自己的需要,自己实例化相关的工厂并且生产相关算法.这么做是因为简单工厂是不满足OCP的,因为如果 ...

  3. C#设计模式(3)——工厂方法模式

    一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是--简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以 ...

  4. 设计模式之工厂方法模式(创建型)

    一.模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使得工厂方法模式可以在不修改 ...

  5. 设计模式之工厂方法模式应用例题

    设计模式之工厂方法模式应用例题 题目描述 类结构图及相关说明 程序代码 运行结果 题目描述 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReade ...

  6. 设计模式:工厂方法模式(Factory method)

    设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...

  7. 【设计模式】工厂方法模式(C#)

    [设计模式]工厂方法模式 1.概述 针对简单工厂中的缺点,使用工厂方法模式就可以完美的解决,完全遵循开闭原则. 定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象.工厂方法使一个产品类的实例化 ...

  8. 一文叫你弄懂Java设计模式之工厂方法模式:图解+日志记录器代码实例

    文章目录 详解Java设计模式之工厂方法模式 案例引入工厂方法模式 工厂方法模式 定义 案例分析 UML类图分析 代码分析 工厂方法的重载 工厂方法的隐藏 模式优点 模式缺点 模式适用环境 详解Jav ...

  9. 设计模式之工厂方法模式(Factory Method)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  10. 021 设计模式之工厂方法模式,抽象工厂模式的区别

    简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...

最新文章

  1. nagios配置监控的一些思路和工作流程
  2. Layer 2 Tunneling Protocol
  3. 判断ShellExecute函数是否执行完一个程序的方法
  4. php验证码切换不刷新页面,Yii2解决验证码点击、刷新页面不刷新问题
  5. Warning: Link to vtkInteractionStyle for default style selection的解决办法
  6. NodeMCU学习(三) : 进入网络世界
  7. php读取xml标签内容,从xml php5获取内容
  8. python中列表实现去重使用_Python实现嵌套列表去重方法示例
  9. java关闭applet_java – Applet会自动关闭
  10. fetch 另一种ajax解决方案
  11. Nginx实战基础篇六 通过源码包编译安装部署LNMP搭建Discuz论坛
  12. 畅捷教育系统服务器,畅捷教育云平台使用手册一、学生操作流程图-畅捷通.PDF...
  13. 抖音上热门的小技巧你都掌握了吗?
  14. android 程序启动监听,监听开机自动启动应用
  15. 微机原理与接口技术期末考试总结
  16. KMP算法中next数组到底有什么深意
  17. html5学生成绩表,学生成绩表excel
  18. ca32a_demo_c++创建动态数组
  19. 车载软件架构—CP和AP相同与不同
  20. ios/swift之尺寸和机型判断

热门文章

  1. springmvc十四:请求处理
  2. mybaits九:自定义结果映射规则
  3. python二十五:装饰器
  4. jQuery之选项卡的实现
  5. Appcan页面跳转
  6. 【leetcode】clone-graph
  7. c语言学习之基础知识点介绍(十二):结构体的介绍
  8. 【win PE】磁盘分区大小的重新调整 (再也不用担心C盘过小了)
  9. Java学习笔记(1)——基本数据类型
  10. windows扫描域内端口