• 【大话设计模式】—— 工厂方法模式


    一、概念

      想象一下我们的寻常见到的工厂,下一个订单,付了订金,一段时间后就能够提货。我们不须要知道工厂是用的什么机器,怎么安排工人的,从哪来的材料,只须要一个订单就好,工厂就能够依照其固定流水线做出我们所须要的产品。设计模式中也有类似的一个大神:工厂方法模式。

      以下让我们来认识一下:

      工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

      

    二、UML图

    Product(抽象产品)

    ConcreteProduct(详细产品)

    Creator(抽象工厂)

    ConcreteCreator(详细工厂)



    三、实例解析

      首先有一个大学生,以学雷锋的名义去帮助老人做事。

      雷锋类,拥有扫地、洗衣、买米等方法,大学生和志愿者继承雷锋的光荣传统,拥有父类雷锋类的 扫地、洗衣、买米等方法。创建一个总的雷锋工厂接口用于创建对象,让子类学雷锋的大学生工厂 和社区志愿者工厂决定实例化哪个类。


    代码例如以下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication6
    {
        class Program
        {
            static void Main(string[] args)
    
            {
                IFactory factory = new UndergraduateFactory();
                LeiFeng student = factory.CreateLeiFeng();
    
                student.BuyRice();
                student.Sweep();
                student.Wash();
            }
        }
    
        //雷锋
        class LeiFeng
        {
            public void Sweep()
            {
                Console.WriteLine("扫地");
            }
            public void Wash()
            {
                Console.WriteLine("洗衣");
            }
            public void BuyRice()
            {
                Console.WriteLine("买米");
            }
        }
        //学雷锋的大学生
        class Undergraduate : LeiFeng
        { }
    
        //学雷锋的志愿者
        class Volunteer : LeiFeng
        { }
    
        
        //雷锋工厂
        interface IFactory
        {
            LeiFeng CreateLeiFeng();
        }
    
        //学雷锋的大学生工厂
        class UndergraduateFactory : IFactory
        {
            public LeiFeng CreateLeiFeng()
            {
                return new Undergraduate();
            }
        }
    
        //学雷锋的社区志愿者工厂
        class VolunteerFactory : IFactory
        {
            public LeiFeng CreateLeiFeng()
            {
                return new Volunteer();
            }
        }
     
    }
    

    结果:


    四、总结

      简单工厂模式攻克了对象的创建问题,它把全部的细节推断都一股脑的扔给了工厂。工厂包括了必要的逻辑推断,可以依据client的选择条件动态实例化相关的类,对于client来说,去除了与详细产品的依赖。凡事都有相对性,有利有弊。加入是方便了,可是后期维护和扩展都须要改动工厂,违背了开闭原则。

      策略模式,封装了算法,降低了各种算法类与使用算法类之间的耦合,可是将推断放入了client,无形之间给client添加了压力。简单工厂和策略两者一结合,把推断隔离出来,单放一个类,就挺好的了。

      工厂方法模式是简单工厂模式的进一步抽象和推广。它是针对改动工厂这一弊端而诞生出来的。当我们再加入一个算法的时候,不须要改动原有工厂类,仅仅须要加入此功能的运算类和对应的工厂类就能够了。克服了开闭原则,又保持了封装对象创建过程的长处。凡事过犹不及,假设添加的产品多了,添加的产品工厂类就增多,额外开发量是非常大的。

     

    五、感受

      学设计模式,就好像一个公司:有一个大boss(client),负责接收和处理系统事件。大boss安排几个专业人士(类),可以完毕各自擅长领域的工作(高内聚),可是他们不只要学会各司其职,也要学会合作(耦合)。为了避免这么多人都一块讨论,效率低下,就出现了各个部门(多态,抽象类),减少了办公室恋情的概率。。。(低耦合),提高了办事效率。

      每一个设计模式跟人一样都不是十全十美的,仅仅有大家分工合作,才干做到手中无剑,心中无剑的境地。


    Ps:期待大家指点O(∩_∩)O~




  • 相关阅读:
    02 nginx 进程结构_热部署_nginx虚拟主机
    Go基础
    01 nginx 概述及安装
    项目--微信小程序
    小程序框架
    常用数据集合
    看正月点灯笼老师的笔记—线段树
    并查集—汇总
    看正月点灯笼老师的笔记—qsort 和 bsearch
    看正月点灯笼老师的笔记—BFS和DFS ( 3 )
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3814954.html
Copyright © 2020-2023  润新知