定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。
模板方法包含以下角色:
例如去银行办理业务,需要取号、排队、办理具体业务等流程,其中取号、排队是必须经过的流程顺序,办理具体业务是抽象的,因人而异
1.创建抽象类Bank
public abstract class Bank { //办理抽象业务 public abstract void Onbusiness(); //模板方法包含具体顺序逻辑 public void TemplateMethod() { //第一步:取号 Getnumber(); //第二步:排队 lineup(); //第三步:办理具体业务 Onbusiness(); } public void Getnumber(){ System.out.println("先取号"); } public void lineup() { System.out.println("再排队"); } }
2.创建具体业务类实现接口
//基金业务 public class FundBusiness extends Bank{ @Override public void Onbusiness() { System.out.println("办理基金业务"); } } //存款业务 public class DepositBusiness extends Bank{ @Override public void Onbusiness() { System.out.println("办理存款业务"); } }
3.客户端实现
public static void main(String[] args) { DepositBusiness depositBusiness=new DepositBusiness(); depositBusiness.TemplateMethod(); System.out.println("--------------------------"); FundBusiness fundBusiness=new FundBusiness(); fundBusiness.TemplateMethod(); }
优点:模板模式提高了代码的复用性,把不变的行为放在父类中,而将不同的代码放入不同的子类中
缺点:对每个不同的实现都需要定义一个子类去实现接口,这会导致类的个数增加,系统更加庞大,设计也更加抽象
适用场景: