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
  • 相关阅读:
    [Postman]历史(8)
    [Postman]响应(7)
    [Postman]请求(6)
    [Postman]查找替换(5)
    ORA-02050故障诊断一例
    转 js实践篇:例外处理Try{}catch(e){}
    转 PHP
    HTML DOM getElementById() 方法
    地点选择
    9i 和 11 g 区别
  • 原文地址:https://www.cnblogs.com/zhangronghua/p/1583872.html
Copyright © 2011-2022 走看看