设计模式之模板模式

一 模板模式

还是计算器的问题,在一个商场里让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();

这就是模板模式,模板模式可以把不变的的行为提出来放在超类里面。除去子类里面重复的代码。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值