设计模式之-工厂方法模式
生活随笔
收集整理的这篇文章主要介绍了
设计模式之-工厂方法模式
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
工厂方法模式(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
总结
以上是生活随笔为你收集整理的设计模式之-工厂方法模式的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Docker宣布企业版支持Windows
- 下一篇: ASP.NET Core中的配置