一 模板模式
还是计算器的问题,在一个商场里让A和B都去计算牙刷的利润,计算利润的计算方式:先计算总收益,再计算成本,总收益减去成本 就是利润。但是A和B 计算的方式不同,A的计算方式是A先计算成本价,再计算总收益。B的计算方式是先计算总收益,才计算成本。用代码来实现,首先他们都有一个一样的行为就是计算牙刷的收益,可以定义为父类,代码如下
public abstract class Operate2 {
public abstract void getOperate();
}
接着子类A 先计算成本,再计算总收益,总收益减去成本,得到收益
public class OperateA extends Operate2 {
public void getOperate() {
System.out.println("先计算成本计算总收益");
System.out.println("收益减去成本");
}
}
子类B先计算总收益,再计算成本,总收益减去成本,得到收益
public class OperateB extends Operate2 {
public void getOperate() {
System.out.println("先计算总收益在计算成本");
System.out.println("收益减去成本");
}
}
看完上面的代码,有没有发现其实在两个子类里面有重复的代码,就是最后都要获取收益的结果,我们是不是可以考虑吧重复的代码提炼出来!
如下修改,只需要改一个父类就行了
public abstract class Operate2 {
public abstract void getOperate();
public void getResult(){
getOperate();
System.out.println();
}
}
子类作如下修改
public class OperateA extends Operate2 {
public void getOperate() {
System.out.println("先计算成本计算总收益");
}
}
子类B 略
客户端调用
Operate2 a= new OperateA();
a.getResult();Operate2 b= new OperateB();
b.getResult();
这就是模板模式,模板模式可以把不变的的行为提出来放在超类里面。除去子类里面重复的代码。