浅析设计模式之策略模式—:为什么总是继承[1]

发表于:2009-11-03来源:作者:点击数: 标签:设计继承模式浅析
浅析设计模式之策略模式—:为什么总是继承[1] uml模型 关键字:uml 模板方法的延续 在模板方法设计模式里我举了一个例子:教育部规定了新生报到流程的算法骨架,然后这个算法骨架中的一些关键步骤由各高校自由的去发挥。我在这个例子中将高校设为一个抽象类

浅析设计模式之策略模式—:为什么总是继承[1]  uml模型

关键字:uml

模板方法的延续

     在模板方法设计模式里我举了一个例子:教育部规定了新生报到流程的算法骨架,然后这个算法骨架中的一些关键步骤由各高校自由的去发挥。我在这个例子中将高校设为一个抽象类,各高校要实现的算法步骤都是抽象方法。我还给出了两个高校的实现代码:清华大学和北京大学。在这个例子中本没有什么问题,但是软件总是会变的。

    当有更多的高校要实现的时候,我们就会发现,很多高校的有些报到步骤实现是一样的,这就存在子类中有大量的重复代码,重复总是会出问题的。当然我们可以使用Martin Fowler的Pull Up Method(Refactoring P320)重构方法,将这些共同的部分推移到高校这个父类实现,并将这个抽象类改为virtual。

public abstract class 高校
{
public void 报到()
{
教务处报到();
缴费();
本院系报到();
教材科发教材();
}
protected abstract void 教务处报到();
//方法由抽象的更改为虚方法
protected virtual void 缴费()
{
//将这个方法在父类去实现,因为好多高校的实现都是这样的,避免重复
}
protected abstract 专业等信息 本院系报到();
protected abstract 教材 教材科发教材();
}


    但是,现在出现了这样的情况:A,B,C等几个大学的实现在某些步骤上有些相同,D,F在某些步骤的实现有些相同,也许你会说:这不好办,继续使用继承呗,将共同的东西往上推,并且在“高校类”和各高校实现的类中间插入一些类,这些类将提供共同的实现。好像是个很好的办法。来瞧一瞧:

原文转自:http://www.ltesting.net