java 23种设计模式之行为型模式—模版方法模式(14)
模版方法模式,顾名思义,就是子类根据父类提供的模版来操作
那么到底什么是模版方法模式(Template Method)呢:
模板方法模式是类的行为模式。将抽象类中部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
首先我们定义一个抽线类:
/* * 银行的账户类型有活期账户和定期账户 * 其利息是不一样的 * 我们这里根据账户类型的不同的计算当前账户的利息是多少 */ public abstract class absAccount { //这里就是模版方法,模版方法用户客户端使用,他的作用就是根据账户类型的不同,得到对应的利息 public void templateMethod(){ String accountType = AccountType(); if(accountType.equals("current")){ AccountMoney(2.5, "活期账户"); }else if(accountType.equals("regular")){ AccountMoney(1.5, "定期帐号"); }else{ AccountMoney(-1.0); } } //获得账户的类型,由子类实现 protected abstract String AccountType(); //这里是实现的方法,用于显示结果,该结果已被模版方法调用 protected void AccountMoney(double interset,String accountType){ if(interset == -1){ System.out.println("账户出现异常,或没有该账户类型"); }else{ System.out.println("当前银行账户为:"+accountType+", "+"该账户的利息是:"+interset); } } private void AccountMoney(double interset){ if(interset == -1){ System.out.println("账户出现异常,或没有该账户类型"); } } }
两个实现类
public class currentAccount extends absAccount{ @Override protected String AccountType() { // TODO 自动生成的方法存根 return "current"; } } public class regularAccount extends absAccount{ @Override protected String AccountType() { // TODO 自动生成的方法存根 return "regular"; } }
测试类
public class demo { public static void main(String[] args) { absAccount acc = new currentAccount(); acc.templateMethod(); acc = new regularAccount(); acc.templateMethod(); } }
运行测试类得到结果如下
当前银行账户为:活期账户, 该账户的利息是:2.5
当前银行账户为:定期帐号, 该账户的利息是:1.5
您也可以创建实现类,返回其他字符,或者我们修改regularAccount类的返回结果是abc
那么最后的结果是
当前银行账户为:活期账户, 该账户的利息是:2.5
账户出现异常,或没有该账户类型
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情