首页 > 其他 > 详细

重构第8天:使用委托代替继承(Replace Inheritance with Delegation)

时间:2016-03-19 19:28:13      阅读:171      评论:0      收藏:0      [点我收藏+]

理解:根本没有父子关系的类中使用继承是不合理的,可以用委派的方式来代替。

详解:我们经常在错误的场景使用继承。继承应该在仅仅有逻辑关系的环境中使用,而很多情况下却被使用在达到方便为目的的环境中。

看下面的代码场景:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace _31DaysRefactor
 7 {
 8 
 9 
10     public class Sanitation
11     {
12         public string WashHands()
13         {
14             return "Cleaned!";
15         }
16 
17     }
18 
19 
20     public class Child : Sanitation
21     {
22 
23     }
24 }

在这个例子中,Child并不是一个Sanitation,两者没有直接的逻辑关系。孩子--公共设施,没有关系,因此使用继承关系并不合适。我们重构代码,使得Child类在构造函数时实例化一个Sanitation对象,委托Sanitation对象调用Sanitation对象的方法,而避免使用继承。如果使用依赖注入,可以通过构造函数注入的方式将Sanitation对象传递给Child。

构造后的code:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace _31DaysRefactor
 7 {
 8 
 9 
10     public class Sanitation
11     {
12         public string WashHands()
13         {
14             return "Cleaned!";
15         }
16 
17     }
18 
19 
20     public class Child
21     {
22         private Sanitation sanitation { get; set; }
23 
24         public Child()
25         {
26             sanitation = new Sanitation();
27         }
28 
29         public string WashHands()
30         {
31             return sanitation.WashHands();
32         }
33     }
34 
35 
36 }

 

重构第8天:使用委托代替继承(Replace Inheritance with Delegation)

原文:http://www.cnblogs.com/yplong/p/5295866.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!