设计模式--模板模式 约定不等于承诺〃 2022-05-17 09:19 179阅读 0赞 模板模式:模板模式指的是定义一个算法骨架,将算法的实现延迟到子类中实现。 通俗理解:就是把一个业务流程中不变的功能写固定,只把变化不确定的那部分功能在骨架方法中抽象,并在继承我们的骨架,并实现在骨架类中的抽象方法。例如去银行办理业务,要经过3个流程:取号—–>办卡/存钱/取钱—–>对银行柜员进行评价,对于取号和评价来说在流程中时固定的,其中从取号到评价这个过程就是我们的骨架方法,办卡/存钱/取钱就是我们的变化的功能,需要抽象化,让子类具体去实现。 优点: (1)可以实现对不变代码的复用,减少代码代码量,提高开发效率 (2)可以满足用户灵活多变的需求 (3)符合开闭原则:对扩展开放,对修改关闭 缺点: 骨架发生改变时,具体的抽象方法也要发生改变 例子: 骨架方法: package cn.partten.lpq4; //设计模式–模板模式–定义一个算法模板,将算法的延迟到子类中去实现,符合开闭原则:扩展开发,修改关闭 //可以灵活地满足用户多变的需求,但骨架一旦改变,抽象的方法也要改变 public abstract class BankTemplateMethod \{ public void gotoBank()\{//骨架方法 //具体的流程 takeNumber();//取号 process();//银行业务:取钱、存钱或者办卡–抽象可变的方法 evaluate();//评价 \} private void takeNumber() { //取号的具体实现方法,是固定的 } private void evaluate() { //在银行办理完业务后对服务进行评价,也是固定的 } public abstract void process() ;//进入银行需要办理怎样的业务,是不确定的所以抽象 \} 抽象类方法:办卡–具体实现 package cn.partten.lpq4; public class GetCard extends BankTemplateMethod \{ public void process()\{ //具体办卡的代码实现 \} \} 抽象类方法:存钱–具体实现 package cn.partten.lpq4; public class SaveMoney extends BankTemplateMethod\{ public void process()\{ //具体存钱的代码实现 \} \} 抽象类方法:取钱–具体实现 package cn.partten.lpq4; public class takeMoney extends BankTemplateMethod \{ public void process()\{ //具体取钱的代码实现 \} \} 实例化子类–具体调用哪一个抽象类方法(要用到哪个功能) package cn.partten.lpq4; public class TestDemo \{ public static void main(String\[\] args) \{ BankTemplateMethod bt=new GetCard();//多态,实例化办卡功能 bt.process();//调用骨架中抽象方法 bt=new SaveMoney();//多态,实例化存钱功能 bt.process(); bt=new takeMoney();//多态,实例化取钱功能 bt.process(); \} \}
还没有评论,来说两句吧...