• 重构19-Extract Factory Class(提取工厂类)


    在代码中,通常需要一些复杂的对象创建工作,以使这些对象达到一种可以使用的状态。通常情况下,这种创建不过是新建对象实例,并以我们需要的方式进行工作。但是,有时候这种创建对象的需求会极具增长,并且混淆了创建对象的原始代码。这时,工厂类就派上用场了。关于工厂模式更全面的描述可以参考这里。最复杂的工厂模式是使用抽象工厂创建对象族。而我们只是使用最基本的方式,用一个工厂类创建一个特殊类的实例。来看下面的代码:

    public class PoliceCarController {
    public PoliceCar New(int mileage, Boolean serviceRequired) {
    PoliceCar policeCar = new PoliceCar();
    policeCar.ServiceRequired = serviceRequired;
    policeCar.Mileage = mileage;
    return policeCar;
    }
    }
    如您所见,New方法负责创建PoliceCar并根据一些外部输入初始化PoliceCar的某些属性。对于简单的创建工作来说,这样做可以从容应对。但是久而久之,创建的工作量越来越大,并且被附加在controller类上,但这并不是controller类的职责。这时,我们可以将创建代码提取到一个Factory类中去,由该类负责PoliceCar实例的创建。
    public interface IPoliceCarFactory {
    PoliceCar Create(int mileage, Boolean serviceRequired);
    }
    public class PoliceCarFactory extends IPoliceCarFactory {
    @Override
    public PoliceCar Create(int mileage, Boolean serviceRequired) {
    PoliceCar policeCar = new PoliceCar();
    policeCar.ReadForService = serviceRequired;
    policeCar.Mileage = mileage;
    return policeCar;
    }
    }
    public class PoliceCarController {
    public IPoliceCarFactory PoliceCarFactory;//getter setter
    public PoliceCarController(IPoliceCarFactory policeCarFactory) {
    PoliceCarFactory = policeCarFactory;
    }
    public PoliceCar New(int mileage, Boolean serviceRequired) {
    return PoliceCarFactory.Create(mileage, serviceRequired);
    }
    }
    由于将创建的逻辑转移到了工厂中,我们可以添加一个类来专门负责实例的创建,而不必担心在创建或复制代码的过程中有所遗漏。





  • 相关阅读:
    [NLP] 语义网络与知识图谱入门(二)
    [NLP] 语义网络与知识图谱入门(一)
    [论文理解] LFFD: A Light and Fast Face Detector for Edge Devices
    [学习笔记] 匈牙利匹配
    [NLP] nlp-lstm-cos -> sin
    [ros] ros入门记录
    [推荐系统] 两种协同过滤
    [NN] Guided Backpropgation 可视化
    [torch] pytorch hook学习
    python高级编程和算法
  • 原文地址:https://www.cnblogs.com/jgig11/p/5786344.html
Copyright © 2020-2023  润新知