`
hanlingbo2008
  • 浏览: 79988 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

模板方法模式的一个例子

UP 
阅读更多

 11.1 模板方法例子 

      考虑一个银行存款例子。假设系统需要支持两种存款账号,及货币市场账号(MoneyMarketAccount  )和定期存款账号(CDAccount)。这两种账号的存款利息是不同的,因此在计算一个存户存款利息的时候,必须区分两种不同的账号。
      这个系统的总行为是计算出利息,这个也就决定了两个步骤:一是确定账号类型,二是确定利息的百分比。因此系统需要两个基本方法:一个计算账号类型,一个计算利息百分比。

 

      代码实现:

    

package test.biancheng.patterns.template.example1;

abstract public class Account
{
    protected String accountNumber;

    public Account()
    {
		accountNumber = null;
    }

    public Account(String accountNumber)
    {
        this.accountNumber = accountNumber;
    }

    final public double calculateInterest()
    {
        double interestRate = doCalculateInterestRate();
        String accountType = doCalculateAccountType();
        double amount = calculateAmount(accountType, accountNumber);

	   	return amount * interestRate;
    }
                                    
    abstract protected String doCalculateAccountType() ;

    abstract protected double doCalculateInterestRate() ;

    final public double calculateAmount(String accountType, String accountNumber)
    {
        //retrieve amount from database...here is only a mock-up
        return 7243.00D;
    }
}

 

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

    public double doCalculateInterestRate()
    {
        return 0.065D;
    }
}

 

public class MoneyMarketAccount extends Account 
{
    public String doCalculateAccountType()
    {
        return "Money Market";
    }

    public 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 earned from Money Market account = " + acct.calculateInterest());

    	acct = new CDAccount();
        System.out.println("Interest earned from CD account = " + acct.calculateInterest());
    }
}

 

分享到:
评论

相关推荐

    模板方法模式例子

    模板方法模式例子代码

    设计模式--模板方法模式java例子

    设计模式--模板方法模式java例子

    设计模式的模板方法模式的例子

    设计模式的模板方法模式的例子,希望对大家有用~~~~~~~~

    设计模式之模板方法模式

    设计模式之模板方法模式,这份文档以例子的形式介绍了模板方法模式

    java设计模式之模板模式

    java设计模式之模板模式,实例子说明模板模式的使用场景。

    模板方法模式

    模板方法模式的定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

    qt工厂模式例子qt简单工程模式源码

    参考如下博客,亲自实践了一个QT的工厂模式,亲测可用,编译运行实测。 我用qt5.6,在windows下编译并运行测试,正常。 https://blog.csdn.net/baidu_33570760/article/details/71159808 1. Qt工厂模式源码 2. C++...

    模板方法模式DEMO

    我自己在学习设计模式时写的一个例子,供大家互相学习探讨。C#程序运行环境VS2005

    23种设计模式项目实例

    创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    freemaker生成模板例子

    FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写  FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序  虽然FreeMarker具有一些编程的能力,但通常由Java程序...

    观察者模式模版和例子

    观测者模式的例子和模版源代码,方便使用者使用

    23种设计模式实例

    总体来说设计模式分为三大类: ...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式例子

    抽象工厂模式例子代码

    此资源是本人博客中的抽象工厂模式的例子代码资源,给供参考

    各种模式 相关 代码 例子

    中介者模式 享元模式 代理模式的简单实现 ...模板方法模式 状态模式 策略模式的简单应用 简单工厂的最最简单应用 组合模式 翻译器模式 职责链模式 装饰模式的简单实现 观察者模式 访问者模式 适配器模式

    Java-设计模式之模板方法模式

    什么是模板方法模式 定义一个操作中的算法骨架,而将一些步骤延迟到子类中去具体实现。模板方法可以使得子类不改变算法的结构就可以重新定义算法的某些特定...不信我举一个下面的例子,看看这是不是你写的那种(●’◡’

    Java常用设计模式例子

    以JAVA为例,汇总了十几种常用的设计模式,包括了:单例模式、工厂模式、建造者模式、适配器模式、装饰器模式、外观模式、命令模式、观察者模式、状态模式、策略模式、模板方法模式等。仅供学习使用。 相关文章请看...

    设计模式中的模板方法模式在Ruby中的应用实例两则

    主要介绍了设计模式中的模板方法模式在Ruby中的应用实例两则,经典的项目经理例子在这里又被套上用了^^需要的朋友可以参考下

    C#设计模式.PDF

    五、 一个实际应用模板方法的例子 208 六、 模版方法模式中的方法 210 七、 重构的原则 211 设计模式(22)-Strategy Pattern 211 一、 策略(Strategy)模式 211 二、 策略模式的结构 212 三、 示意性源代码 212 ...

    画笔-设计模式的例子

    适合刚刚学习设计模式,画笔-设计模式的例子是一个比较简单的实列,很多地方可以修改

    C#设计模式大全

    五、 一个实际应用模板方法的例子 六、 模版方法模式中的方法 七、 重构的原则 设计模式(22)-Strategy Pattern 一、 策略(Strategy)模式 二、 策略模式的结构 三、 示意性源代码 四、 何时使用何种具体...

Global site tag (gtag.js) - Google Analytics