java 23种设计模式之行为型模式—模版方法模式(14)

java 23种设计模式之行为型模式—模版方法模式(14)

模版方法模式,顾名思义,就是子类根据父类提供的模版来操作

那么到底什么是模版方法模式(Template Method)呢:


模板方法模式是类的行为模式。将抽象类中部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。


我这里有一个关于银行卡的例子,如活期(current)和定期(regular)账户,他们的利息是不一样的,那么我们如何根据账户的不同而显示出其对应的利息呢


首先我们定义一个抽线类:


/*
 * 银行的账户类型有活期账户和定期账户
 * 其利息是不一样的
 * 我们这里根据账户类型的不同的计算当前账户的利息是多少
 */
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/天,具体规则查看活动详情Blog Img