zoukankan      html  css  js  c++  java
  • 设计模式之-工厂方法模式

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

  • 相关阅读:
    安装Visual_Studio的艰辛历程
    桶排序和直接排序的算法和数据结构
    链式队列的c++代码和原理以及编译分析
    C# 利用xmlhttp根据网址调用接口获取数据
    使用 LINQ To SQL 和实体框架实现灵活的数据访问
    K51的安装包和ET199的开发包和示例
    The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[BMS.DataAccess.Models.ServiceTyp
    VS2008中文版中安装 silverlight 3 英文版
    让Windows Server 2008+IIS 7+ASP.NET支持10万个同时请求(转)
    在windows2003+IIS6部署dot net的MVC项目
  • 原文地址:https://www.cnblogs.com/hhzblogs/p/10363558.html
Copyright © 2011-2022 走看看