码迷,mamicode.com
首页 > 其他好文 > 详细

模板方法模式(Template Method)

时间:2015-08-26 19:38:06      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

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

下面考虑一个计算存款利息的例子。假设系统需要支持两种存款账号,即货币市场(Money Market)账号和定期存款(CD或Certificate of Deposite)账号。这两种账号的存款利息是不同的,因此,在计算一个存户的存款利息额时,必须区分两种不同的账号类型。

这个系统的总行为是计算出利息,这也就决定了作为一个模板方法模式的顶级逻辑应当是利息计算。由于利息计算涉及到两个步骤:一是确定账户的类型,二是确定利息的百分比,因此系统需要两个基本方法:一个基本方法给出账号种类,另一个基本方法给出利息百分比。这两个基本方法构成具体逻辑,因为账号的类型不同,所以具体逻辑会有所不同。

public abstract class Account
{
    protected String accountNumber;
    public Account()
    {
        accountNumber=null;
    }
    public Account(String accountNumber)
    {
        this.accountNumber=accountNumber;
    }
    /*
    * 模板方法,计算利息数额
    * */
    public final double calculateInterest()
    {
        double interestRate=doCalculateInterestRate();
        String accountType=doCalculateAccountType();
        double amount=calculateAmount(accountType,accountNumber);
        return amount*interestRate;
    }
    /*
    * 基本方法留给子类实现
    * **/
    protected abstract String doCalculateAccountType();
    protected abstract double doCalculateInterestRate();
    public final double calculateAmount(String accountType,String accountNumber)
    {
        return 7243.00D;
    }
  }

 

public class CDAccount extends Account
{
    @Override
    protected String doCalculateAccountType() {
        return "Certificate of Deposite";
    }

    @Override
    protected double doCalculateInterestRate() {
        return 0.065D;
    }
}

 

public class MoneyMarketAccount extends Account
{
    @Override
    protected String doCalculateAccountType() {
        return "Monkey Market";
    }

    @Override
    protected double doCalculateInterestRate() {
        return 0.045D;
    }
}

 

public class Client
{
    private static Account acct=null;

    public static void main(String[] args) {
        acct=new MoneyMarketAccount();
        System.out.println("Interest from Money Market account"+acct.calculateInterest());
        acct=new CDAccount();
        System.out.println("Interest from CD account"+acct.calculateInterest());
    }
}

 

模板方法模式(Template Method)

标签:

原文地址:http://www.cnblogs.com/xtsylc/p/4761040.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!