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

    前言

    点击查看:设计模式系列 

    如果你对工厂模式这个概念不是很理解,建议:设计模式-简单工厂模式 

    如果你对.net反射机制不了解,建议:.net反射详解 

    工厂方法模式

    描述一下工厂方法的概要:简单工厂模式是要在工厂类中通过数据来做个决策,在工厂类中的多个类中实例化出来其中一个要用到的类,做运算。而工厂方法模式则是他的一个聪明的扩展,不在工厂类中做决策,而是把这个决策推迟到每个用到他的地方。

    等待使用的类库代码:

     /// <summary>
        /// Live类
        /// </summary>
        public abstract class Live
        {
            public abstract void Action();
        }
        /// <summary>
        /// Music类
        /// </summary>
        public class Music : Live
        {
            public override void Action()
            {
                Console.WriteLine("哼哼哈嘿,快使用刷结棍!");
            }
        }
    
        /// <summary>
        ///  Bread类
        /// </summary>
        public class Bread : Live
        {
            public override void Action()
            {
                Console.WriteLine("努力,面包会有的,鸡蛋也会有的。");
            }
        }

    工厂方法实例化类:

         /// <summary>
        /// LiveFactory类
        /// </summary>
        public abstract class LiveFactory
        {
            public abstract Live Create();
        }
    
        /// <summary>
        /// MusicFactory类
        /// </summary>
        public class MusicFactory : LiveFactory
        {
            public override Live Create()
            {
                return new Music();
            }
        }
        /// <summary>
        /// BreadFactory类
        /// </summary>
        public class BreadFactory : LiveFactory
        {
            public override Live Create()
            {
                return new Bread();
            }
        }

    如何使用工厂类选择创建实例(反射优化):

     public static void Main(string[] args)
            {
    
                LiveFactory liveFactory = new MusicFactory();
                Live musicLive = liveFactory.Create();
                musicLive.Action();
                Console.ReadLine();
    
                //使用反射优化,修改变量就可得到想要的结果,而不必修改代码
                string strfactoryName = "BreadFactory";
                LiveFactory factory;
                factory = (LiveFactory)Assembly.Load("设计模式").CreateInstance("设计模式.工厂方法模式." + strfactoryName);
                Live live = factory.Create();
                live.Action();
                Console.ReadLine();
    
            }

    使用此模式:降低调用端的耦合度,并且对于工厂来说,是可以扩展的,以后如果想过另外的一种生活方式,只需要再增加一个工厂类的实现就可以。无论是灵活性还是稳定性都得到了极大的提高。

    什么时候使用工厂方法(此段摘自:《c#设计模式》,理解下)

    下列情况考虑使用工厂方法

    1.类不能预测它必须创建哪一种类型的对象。

    2.类使用它的子类指定他要创建的对象。

    3.希望只有局部知晓那个类被创建。

    关于工厂模式会有几种变化,需要了解一下。

    1.基类是抽象的,但模式必须返回一个可用的对象。

    2.基类包含默认的方法,只有在默认方法不能胜任的情况下才调用这些方法。

    3.传递给工厂的参数告知其返回几种类型的类中的哪一个,在这种情况下,类可能会共用相同的方法名称,但要实现的事情可能是很不相同的。

    设计模式,讨论,运用,欢迎加入博客园左上方群

  • 相关阅读:
    A Year Of Books
    Spring Boot 之 RESRful API 权限控制
    Git回滚远程版本
    初探设计:Java接口和抽象类何时用?怎么用?
    深入浅出: Java回调机制(异步)
    深入浅出: 大小端模式
    Java IO 之 FileInputStream & FileOutputStream源码分析
    Java IO 之 OutputStream源码
    软件测试--安装软件
    Mybatis 中$与#的区别
  • 原文地址:https://www.cnblogs.com/knowledgesea/p/3919824.html
Copyright © 2011-2022 走看看