Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1814286
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: C/C++

2012-03-25 18:32:52

Pull Up Field 上移字段:把子类共有字段上移到父类中。

 

Pull Up Method 上移方法:把子类共有的方法移到父类中。

 

Pull Up Constructor Body 上移构造器主体:子类的构造方法有重复代码,因为构造函数不能上移,所以考虑把函数体上移到父类的构造函数里,再在子类的构造方法里调用父类的构造方法。

 

Push Down Method 下移方法:父类的某些方法只有小部份子类需要继承,把这些方法下移到真正需要它们的子类里。

 

Push Down Filed 下移字段:父类的某些字段只有小部分子类需要继承,把这些字段下移到真正需要它们的子类里。

 

Extract Subclass 提取子类:某个类的包含了一些特殊情 况,可以把这个特殊情况提取出来成一个子类。class Person { void Move() { if (age < 1) crowl(); else walk() }  因为age < 1是一个特殊情况,可以把它提成一个baby子类。其实就算不是特殊情况,这个Person类也可以重构成Baby和Adult两个子类。

 

Extract Superlass 提取超类:有些类有些共性,可以把这个共性提取出来成为这些类的一个父类。

 

Extract Interface 提取接口:接口的好处就是,用户只需 要知道接口里提供的功能,而不用知道实现这个功能的类的所有细节。interface IComparable { int compare( IComparable other); } 用户可以只知道这么个接口,他的的函数可以这样写:sort(IComparable)。实现这个interface的类可以是 class Number : IComparable { int compare() {} void add() {} void sub() {} } 但用户根本就不想知道这个add方法和sub方法。只暴露接口可以减轻用户的智力负担。

 

Collapse Hierarchy 合并继承层次:有时一些继承层次并 不是很必要。class Cat { void EatMouse() {} } class BlackCat : Cat {} class WhiteCat : Cat {} 不管黑猫白猫,只有能抓老鼠都是好猫。class Cat { Color color; } 就解决了问题。如果每个颜色的猫,黄猫花猫,都要加个子类的话,累死了,且没有实际意义。

 

Form Template Method 形成Tempate Method: 这里的Template Method和C++里的Template有所区别,它是用在继承层次里的。当一件事情分为多个工序,工序的顺序相同,但每个工序是实现却有不同,可是在 父类中实现这样一个方法:class Employee { DailyWork() {MorningWork(); HaveLunch(); AfternoonWork(); } } 每个Employee的日常工作大致都是这样,但每个员工做的事又不一样。比如class Engineer { void MorningWork() { ReadEmail(); Coding(); } void HaveLunch() { EatRice(); } void AfternoonWork() { CodingCodingCoding(); } } 经理呢,可以做些其它事 class Manager { void MorningWork() { MeetingMeeting(); } void HaveLunch() { DrinkCoffee(); } void AfternoonWork() { TalkTalkTalk(); } }

 

Replace Inheritance with Delegation 用委托代替继承:委托就是Wrapper。把原来的父类wrap到自己类里,增加一个函数做一个转接。这样的好处就是不必继承原来的父类中的所有的特性。

 

Replace Delegation with Inheritance 用继承代替委托:如果一个类和另一个类本来就应该是父子关系——它应该继承父类的所有特性,那么就从wrapper的身份变为子类的身份。

阅读(1142) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~