zoukankan      html  css  js  c++  java
  • 31天重构指南之十九:提取工厂类

    今天要说的重构最早由Gof提出,在网络上可以找到很多的资源。两个不同的工厂模式可以在这里找到:Abstract Factroy Factory Method

    通常我们需要在代码中设置一些对象,以便获得它们的状态,从而使用对象,所谓的设置通常来说就是创建对象的实例并调用对象的方法。有时如果要创建的对象很多,则代码会变的复杂。这便是工厂模式发挥作用的情形。关于工厂模式的完整描述可以从这里查看。工厂模式的复杂应用是使用抽象工厂(Abstract Factory)创建对象集,但我们在这里只是使用基本的工厂类创建对象的一个实例。让我们来看下面的代码:

       1: public class PoliceCarController
       2: {
       3:     public PoliceCar New(int mileage, bool serviceRequired)
       4:     {
       5:         PoliceCar policeCar = new PoliceCar();
       6:         policeCar.ServiceRequired = serviceRequired;
       7:         policeCar.Mileage = mileage;
       8:  
       9:         return policeCar;
      10:     }
      11: }
     
    在上面的代码中,New方法的目的是创建PolicaCar的实例并根据外部输入设置实例的属性,在一般情形下,New方法可以良好工作,但是随着时间的推移,
    PoliceCar的创建工作要做的事件会越来越多,其中有一些事情不应该出现在PoliceCarController中,在这种情形下我们将PoliceCar的创建工作从
    PoliceCarController中提到到工厂类中。
       1: public interface IPoliceCarFactory
       2: {
       3:     PoliceCar Create(int mileage, bool serviceRequired);
       4: }
       5:  
       6: public class PoliceCarFactory : IPoliceCarFactory
       7: {
       8:     public PoliceCar Create(int mileage, bool serviceRequired)
       9:     {
      10:         PoliceCar policeCar = new PoliceCar();
      11:         policeCar.ReadForService = serviceRequired;
      12:         policeCar.Mileage = mileage;
      13:         return policeCar;
      14:     }
      15: }
      16:  
      17: public class PoliceCarController
      18: {
      19:     public IPoliceCarFactory PoliceCarFactory { get; set; }
      20:  
      21:     public PoliceCarController(IPoliceCarFactory policeCarFactory)
      22:     {
      23:         PoliceCarFactory = policeCarFactory;
      24:     }
      25:  
      26:     public PoliceCar New(int mileage, bool serviceRequired)
      27:     {
      28:         return PoliceCarFactory.Create(mileage, serviceRequired);
      29:     }
      30: }
     
    现在我们将创建逻辑提取到工厂类中,我们可以添加另一个类来创建对象的实例却不用担心引入重复代码。
     
    原文链接:http://www.lostechies.com/blogs/sean_chambers/archive/2009/08/19/refactoring-day-19-extract-factory-class.aspx
  • 相关阅读:
    macOS Big Sur 关闭 SIP 正确方法
    绕过CDN寻找真实IP的8种方法
    mycat 链接mysql提示ERROR 3009 (HY000): java.lang.IllegalArgumentExceptio解决方式
    【SpringBoot】SpringBoot 内嵌容器及性能
    【Java】基于NIO的聊天室
    【Java】基于BIO的聊天室
    【ZooKeeper】ZooKeeper源码编译
    【SpringBoot】 使用外部Tomcat方法及启动原理
    【Java】深入理解SPI机制
    【SpringBoot】SpringBoot 自动配置原理
  • 原文地址:https://www.cnblogs.com/zhangronghua/p/1583872.html
Copyright © 2011-2022 走看看