设计模式之-工厂方法模式
工厂方法模式(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
设计模式之-工厂方法模式相关推荐
- python类是实例的工厂_Python设计模式之工厂方法模式实例详解
本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...
- 设计模式复习-工厂方法模式
设计模式复习-工厂方法模式 相对于简单工厂,工厂方法是把算法类的实例化延迟到了调用者那去做,调用者根据自己的需要,自己实例化相关的工厂并且生产相关算法.这么做是因为简单工厂是不满足OCP的,因为如果 ...
- C#设计模式(3)——工厂方法模式
一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是--简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以 ...
- 设计模式之工厂方法模式(创建型)
一.模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使得工厂方法模式可以在不修改 ...
- 设计模式之工厂方法模式应用例题
设计模式之工厂方法模式应用例题 题目描述 类结构图及相关说明 程序代码 运行结果 题目描述 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReade ...
- 设计模式:工厂方法模式(Factory method)
设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...
- 【设计模式】工厂方法模式(C#)
[设计模式]工厂方法模式 1.概述 针对简单工厂中的缺点,使用工厂方法模式就可以完美的解决,完全遵循开闭原则. 定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象.工厂方法使一个产品类的实例化 ...
- 一文叫你弄懂Java设计模式之工厂方法模式:图解+日志记录器代码实例
文章目录 详解Java设计模式之工厂方法模式 案例引入工厂方法模式 工厂方法模式 定义 案例分析 UML类图分析 代码分析 工厂方法的重载 工厂方法的隐藏 模式优点 模式缺点 模式适用环境 详解Jav ...
- 设计模式之工厂方法模式(Factory Method)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...
- 021 设计模式之工厂方法模式,抽象工厂模式的区别
简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...
最新文章
- nagios配置监控的一些思路和工作流程
- Layer 2 Tunneling Protocol
- 判断ShellExecute函数是否执行完一个程序的方法
- php验证码切换不刷新页面,Yii2解决验证码点击、刷新页面不刷新问题
- Warning: Link to vtkInteractionStyle for default style selection的解决办法
- NodeMCU学习(三) : 进入网络世界
- php读取xml标签内容,从xml php5获取内容
- python中列表实现去重使用_Python实现嵌套列表去重方法示例
- java关闭applet_java – Applet会自动关闭
- fetch 另一种ajax解决方案
- Nginx实战基础篇六 通过源码包编译安装部署LNMP搭建Discuz论坛
- 畅捷教育系统服务器,畅捷教育云平台使用手册一、学生操作流程图-畅捷通.PDF...
- 抖音上热门的小技巧你都掌握了吗?
- android 程序启动监听,监听开机自动启动应用
- 微机原理与接口技术期末考试总结
- KMP算法中next数组到底有什么深意
- html5学生成绩表,学生成绩表excel
- ca32a_demo_c++创建动态数组
- 车载软件架构—CP和AP相同与不同
- ios/swift之尺寸和机型判断