• 提取工厂类


    概念:本文中的“提取工厂类”是指假设要创建的对象非常多,则代码会变的非常复杂。一种非常好的方法就是提取工厂类。

     

    正文:一般来说我们须要在代码中设置一些对象,以便获得它们的状态,从而使用对象,所谓的设置通常来说就是创建对象的实例并调用对象的方法。有时假设要创建的对象非常多。则代码会变的非常复杂。这便是工厂模式发挥作用的情形。工厂模式的复杂应用是使用抽象工厂创建对象集,但我们在这里仅仅是使用主要的工厂类创建对象的一个简单应用。

    例如以下代码所看到的。New方法包括创建类的整个逻辑,假设如今要创建的类比較多并且逻辑比較复杂的话(如依据不同条件创建对象,什么时候创建对象)。我们的New方法逻辑会变得非常大,同一时候代码也变得非常难维护。所以我们就会採用提取工厂类的方式进行提炼。

    namespace LosTechies.DaysOfRefactoring.ExtractServiceClass.Before 

        public class PoliceCarController 
       

            public PoliceCar New(int mileage, bool serviceRequired) 
            { 
                PoliceCar policeCar = new PoliceCar(); 
                policeCar.ServiceRequired = serviceRequired; 
                policeCar.Mileage = mileage; 

                return policeCar; 
            } 
        } 
    }

    那么重构后的代码例如以下。New方法变得非常easy了,指须要调用实现接IPoliceCarFactory 接口的PoliceCarFactory 类就能够返回对象,这样就隔开了创建对象的逻辑,假设需求如今变为依据不同的条件创建不同的对象,什么时候创建对象等都变成了比較简单的事情,在后期能够把对象都配置在XML里面,使用反射的方式实现IOC注入创建。

    namespace LosTechies.DaysOfRefactoring.ExtractServiceClass.After
    {
        public interface IPoliceCarFactory
        {
            PoliceCar Create(int mileage, bool serviceRequired);
        }
    
        public class PoliceCarFactory : IPoliceCarFactory
        {
            public PoliceCar Create(int mileage, bool serviceRequired)
            {
                PoliceCar policeCar = new PoliceCar();
                policeCar.ReadForService = serviceRequired;
                policeCar.Mileage = mileage;
                return policeCar;
            }
        }
    
        public class PoliceCarController
        {
            public IPoliceCarFactory PoliceCarFactory { get; set; }
    
            public PoliceCarController(IPoliceCarFactory policeCarFactory)
            {
                PoliceCarFactory = policeCarFactory;
            }
    
            public PoliceCar New(int mileage, bool serviceRequired)
            {
                return PoliceCarFactory.Create(mileage, serviceRequired);
            }
        }
    }

    总结:这个重构常常会在项目中使用。假设要创建的对象是一个。你能够採用简单工厂,可是这样的方式还是会存在非常多依赖,维护起来也比較不方便。所以推荐使用工厂方法模式,把实例化延迟到子类。假设你要创建一系列的对象,那么就推荐你使用抽象工厂模式,可是要注意不要过度设计,仅仅要能满足不断变化的需求和给以后的维护和重构带来方便就可以。

  • 相关阅读:
    二叉树(8)----第一个二叉树K层节点和二进制部分K叶节点层,递归和非递归
    android文件缓存,并SD卡创建目录未能解决和bitmap内存溢出解决
    Ubuntu Ruby On Rails安装和配置
    Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 循环队列
    ORACLE经常使用的命令
    增加 Java 有几个好习惯表现
    HTML5学习资源
    FFT 的C 语言
    MongoDB在window下的安装
    白话经典算法系列之七 堆与堆排序
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6776981.html
Copyright © 2020-2023  润新知