• 设计模式之-工厂方法模式


    工厂方法模式(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

  • 相关阅读:
    url编码
    客户端安全-xss-1类型介绍
    阿里云扩容教程
    jquery获取和设置表单数据
    uMlet建模工具
    phpstorm的调试工具xdebug
    服务器如何处理http请求
    http基础实战
    协程
    Goroutine(协程)为何能处理大并发?
  • 原文地址:https://www.cnblogs.com/hhzblogs/p/10363558.html
Copyright © 2020-2023  润新知