码迷,mamicode.com
首页 > 其他好文 > 详细

重构第19天 提取工厂类(Extract Factory Class)

时间:2016-04-10 01:08:36      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

理解:本文中的“提取工厂类”是指如果要创建的对象很多,则代码会变的很复杂。一种很好的方法就是提取工厂类。

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

重构前代码:

 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方法包含创建类的整个逻辑,如果现在要创建的类比较多而且逻辑比较复杂的话(如根据不同条件创建对象,什么时候创建对象),我们的New方法逻辑会变得很大,同时代码也变得很难维护。所以我们就会采用提取工厂类的方式进行提炼。

重构后代码:

 

 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     }

 

         New方法变得很简单了,指需要调用实现接IPoliceCarFactory 接口的PoliceCarFactory 类就可以返回对象,这样就隔开了创建对象的逻辑,如果需求现在变为根据不同的条件创建不同的对象,什么时候创建对象等都变成了比较简单的事情,在后期可以把对象都配置在XML里面,使用反射的方式实现IOC注入创建。

         如果要创建的对象是一个,你可以采用简单工厂,但是这种方式还是会存在很多依赖,维护起来也比较不方便。所以推荐使用工厂方法模式,把实例化延迟到子类。如果你要创建一系列的对象,那么就推荐你使用抽象工厂模式,但是要注意不要过度设计,只要能满足不断变化的需求和给以后的维护和重构带来方便即可。

 

重构第19天 提取工厂类(Extract Factory Class)

标签:

原文地址:http://www.cnblogs.com/yplong/p/5373045.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!