目录
公司的主营业务中涉及不同渠道进来的客源,针对每一种来源都写一遍业务会造成代码逻辑的不清晰,并且后续维护困难,针对这种情况,主管提出代码需要重构,耦合的情况下(不同渠道进来客源可能会执行某些相同操作)还要分清各个渠道来源,方便后续维护,这里就用到了我们熟悉的模板设计模式。
简介
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。图例如下:
创建过程
定义抽象类
public abstract class Game {
abstract void init();
abstract void startPlay();
abstract void endPlay();
protected void exit(){
System.out.println("end.....");
}
public final void play(){
this.init();
this.startPlay();
this.endPlay();
this.end()
}
}
实现抽象类1
class WowGame extends Game{
@Override
void init() {
System.out.println("WowGame....init");
}
@Override
void startPlay() {
System.out.println("WowGame....startPlay");
}
@Override
void endPlay() {
System.out.println("WowGame....endPlay");
}
}
实现抽象类2
class FootBallGame extends Game{
@Override
void init() {
System.out.println("FootBallGame....init");
}
@Override
void startPlay() {
System.out.println("FootBallGame....startPlay");
}
@Override
void endPlay() {
System.out.println("FootBallGame....endPlay");
}
}
针对不同渠道的数据,涉及相同的操作可以在抽象类中统一实现如exit()方法。
总结
优点:
- 封装不变部分,扩展可变部分。把认为不变部分的算法封装到父类中实现,而可变部分的则可以通过继承来继续扩展。
- 提取公共部分代码,便于维护。
- 行为由父类控制,子类实现。
缺点:
算法骨架需要改变时需要修改抽象类。
按照设计习惯,抽象类负责声明最抽象、最一般的事物属性和方法,实现类负责完成具体的事务属性和方法,但是模板方式正好相反,子类执行的结果影响了父类的结果,会增加代码阅读的难度。