首页 > 编程语言 >Java: Template Method Patterns

Java: Template Method Patterns

时间:2022-09-23 22:35:03浏览次数:54  
标签:12 return accountNumber 09 Patterns 2022 acct Java Method

 

/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 模板方法模式 Template Method Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc Account.java
 *
 * */

package com.javapatterns.templatemethod;

/**
 *抽象类  账号
 * @author geovindu
 *
 * */
abstract public class Account {
    /**
     *
     *
     * */
    protected String accountNumber;
    /**
     *
     *
     * */
    public Account()
    {
        accountNumber = null;
    }
    /**
     *
     *
     * */
    public Account(String accountNumber)
    {
        this.accountNumber = accountNumber;
    }
    /**
     * 模板方法,计算利息数据数额
     * @return  返回利息数额
     * */
    final public double calculateInterest()
    {
        double interestRate = doCalculateInterestRate();
        String accountType = doCalculateAccountType();
        double amount = calculateAmount(accountType, accountNumber);

        return amount * interestRate;
    }
    /**
     *基本方法留给子类实现
     *账户类型
     * @return
     * */
    abstract protected String doCalculateAccountType() ;
    /**
     *基本方法留给子类实现
     * @return
     * */
    abstract protected double doCalculateInterestRate() ;
    /**
     *基本方法已经实现
     * @param accountType 输入类型
     * @param accountNumber  数字类型
     * @return
     * */
    final public double calculateAmount(String accountType, String accountNumber)
    {
        this.accountNumber=accountNumber;
        double rs=3.00D;
        if(accountType=="Certificate of Deposite" && accountNumber=="1")
        {
            rs=8888.00D;

        }
        if(accountType=="Certificate of Deposite" && accountNumber=="2")
        {
            rs=100000.00D;
        }

        if(accountType=="Money Market" && accountNumber=="1")
        {
            rs=8888.00D;

        }
        if(accountType=="Money Market" && accountNumber=="2")
        {
            rs=100000.00D;
        }
        return rs;
    }

}

  

/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 模板方法模式 Template Method Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc MoneyMarketAccount.java
 *
 * */



package com.javapatterns.templatemethod;
/**
 *货币市场账号
 * @author geovindu
 *
 * */
public class MoneyMarketAccount  extends Account {
    /**
     *基本方法这里实现
     *
     * @return
     * */
    public String doCalculateAccountType()
    {
        return "Money Market";
    }
    /**
     *基本方法这里实现
     *利率
     * @return
     * */
    public double doCalculateInterestRate()
    {
        return 0.045D;
    }



}

  

/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 模板方法模式 Template Method Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc CDAccount.java
 *
 * */


package com.javapatterns.templatemethod;
/**
 *具体子类 定期存款账号
 * @author geovindu
 * */
public class CDAccount extends Account {


    /**
     *基本方法这里实现
     * @return
     * */
    public String doCalculateAccountType()
    {
        return "Certificate of Deposite";
    }
    /**
     *基本方法这里实现
     *利率
     * @return
     * */
    public double doCalculateInterestRate()
    {
        return 0.065D;
    }
}

  调用测试:

 //模板方法模式
            Account acct = null;
            acct = new MoneyMarketAccount();
            acct.calculateAmount("Money Market","1");
            System.out.println("Amount: 8888.00DInterest earned from Money Market account = " + acct.calculateInterest());
            acct = new CDAccount();
            acct.calculateAmount("Certificate of Deposite","1");
            System.out.println("Amount: 8888.00D Interest earned from CD account = " + acct.calculateInterest());

            acct = new MoneyMarketAccount();
            acct.calculateAmount("Money Market","2");
            System.out.println("Amount: 100000.00D  Interest earned from Money Market account = " + acct.calculateInterest());
            acct = new CDAccount();
            acct.calculateAmount("Certificate of Deposite","2");
            System.out.println("Amount: 100000.00D  Interest earned from CD account = " + acct.calculateInterest());

  

输出:

Amount: 8888.00DInterest earned from Money Market account = 399.96
Amount: 8888.00D Interest earned from CD account = 577.72
Amount: 100000.00D  Interest earned from Money Market account = 4500.0
Amount: 100000.00D  Interest earned from CD account = 6500.0

  

标签:12,return,accountNumber,09,Patterns,2022,acct,Java,Method
From: https://www.cnblogs.com/geovindu/p/16724537.html

相关文章

  • javaSE基础-泛型
    泛型为什么要有泛型泛型:相当于标签集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象,所以在jdk1.5之前只能把元素类型设计为Object,在jdk1.5......
  • bug记录|NON-STATIC METHOD CANNOT BE REFERENCED FROM A STATIC CONTEXT
    bug记录|NON-STATICMETHODCANNOTBEREFERENCEDFROMASTATICCONTEXT  问题:原因:静态方法无法调用自己定义的非静态方法解决方案:1.改变非静态方法为静态方法,......
  • Go 和 Java 程序退出机制的区别
    前情提要写这篇随笔的原因是最近在写mit6.824的lab1,实验中使用rpc作为coordinator和worker的通信方式。因为之前一直使用Java,所以就想对比一下两种语言的退出机......
  • java学习第五天笔记-方法使用114-带返回值的参数3
       ......
  • java学习第五天笔记-方法使用115-方法小结
        ......
  • Java基础Day4-Java方法
    一、方法的定义Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段。方法包括一个方法头和一个方法体。修饰符返回值类型方法名(参数类型参数名){......
  • java中static分析
    在类中,使用static修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个类所有。静态成员不依赖于......
  • java自定义导出Excel格式
    使用apache的poi自定义格式导出Excelpom.xml<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17......
  • 【小测试】读取*.proto文件,再读取service中method的注释
    想要在proto3中定义service,及其service的method。然后在method后面加上特殊注释,通过这个特殊注释来动态生成代码。下面是测试代码:import("github.com/golang/prot......
  • JAVA + LR实现apache流媒体的性能测试
    一个视频点播系统,使用apache实现的流媒体服务器。其实准确的说叫做伪流(HTTPPseudo-Streaming),基本原理和概念自行了解吧。让我简单的描述就是仍然是HTTP下载,播放器播放本地......