有时候,我们会碰到另外的一种情况,比如,银行利息的计算,都是利率乘以本金和存款时间,但是,各种存款方式计算利率的方式的不同,一般而言,定期的存款利率比活期的利率要高;而定期的时间越长,它的利率也越高。因此,我们在设计“银行账户”这个类的时候,我们可以将计算利息这个方法定义成抽象方法,然后,再在各种不同类型账号的子类中来具体实现这个方法。但是,对于这个方法而言,有更好的一种设计思路:将这个方法中计算利息的算法骨架搭建出来,而对于一些细节,推迟到子类中来实现。这种设计的好处是,避免了子类设计中的随意性。
我们来看上面这个思路的实现方式。
abstract class LoanAccount {
// 利息
private double interest;
// 本金
private double fund;
public double calculateInterest() {
// 用于计算利息的算法:本金*利率,
// 但是利率的算法实现并没有在这个类中实现
interest = getFund() * getInterestRate();
System.out.println(interest);
return interest;
}
public void setFund(double fund) {
this.fund = fund;
}
public double getFund() {
return this.fund;
}
/**
* 不同的存款类型有不同的利率, 因此,不在这个父类中实现利率的计算方法, 而将它推迟到子类中实现
*/
protected abstract double getInterestRate();
}
对于刚才讨论的银行的账户的例子,我们可以给所有类型的账户定义一个超类LoanAccount,在这个超类中,有一个用于计算利息的方法caculateInterest(),已经将它的算法写好了,这个方法返回一个“本金*利率” 的值。但是,因为其中的利率根据存款类型的不同而不同,所以没有具体的实现获得利率的方法,所以,将这个获得利率的方法放到子类中去实现,根据不同的子类,设计出不同的获得利率的方法。
下面是继承了这个抽象类的一个子类:
class AccountA extends LoanAccount{
//只需要实现父类中没有实现的用于获取利率的抽象方法
public double getInterestRate(){
return 10.0;
}
}
在这个子类中,没有加上自己的属性,它只是简单的实现了父类中的抽象方法getInterestRate,这样,这个类就成了一个完整的账户类了。可以使用以下的方式来使用这个类:
public class TestAccount {
/**
* @param 本金
*
*/
public static void main(String args[]) {
AccountA account = new AccountA();
account.setFund(100.0);
account.calculateInterest();
}
}
分享到:
相关推荐
### Java利用接口和抽象类改写求圆的面积和梯形的面积 #### 深入理解Java的接口和抽象类 在Java编程语言中,接口(Interface)和抽象类(Abstract Class)都是用于实现多态性和代码复用的重要概念。它们都无法被...
在设计模式中,抽象类常用于定义一个接口或者作为模板,指导子类实现特定的功能。 适配器模式是一种结构型设计模式,它的主要作用是在不修改原有类的基础上,使得原本由于接口不兼容而不能一起工作的类能够协同工作...
总的来说,模板设计模式是一种强大的工具,它有助于我们在保持代码结构稳定的同时,实现高度的灵活性和可扩展性。理解并熟练运用模板模式,可以提升软件设计的质量和可维护性,降低系统复杂度,提高开发效率。在实际...
模板方法模式是一种行为设计模式,它允许在定义行为框架的同时,延迟部分具体步骤到子类中实现。这种模式主要用于在父类中定义算法的骨架,而将一些步骤的实现细节留给子类去完成,从而使得不同的子类可以重用相同的...
以下是关于Java版本设计模式实现demo的一些补充说明: 1. 设计模式分类 设计模式通常分为三大类:创建型模式、结构型模式和行为型模式。创建型模式关注对象的创建;结构型模式关注类或对象的组合;行为型模式则关注类或...
为了提高代码的可复用性和可维护性,我们可以利用模板设计模式来构建公共且通用的Dao。 **模板方法模式的核心组成部分** 1. **抽象类(Abstract Class)**:通常包含一个或多个抽象方法,这些方法将由具体子类实现...
在Java中,模板方法模式通常通过抽象类来实现,这个抽象类包含了主要的操作流程,也就是模板方法。模板方法一般声明为final,防止子类覆盖其具体实现。同时,抽象类中定义了一些抽象方法或者钩子方法(hook method)...
另一方面,抽象类可以作为设计模式的基础,比如模板方法模式,其中抽象类定义了算法的框架,而具体步骤则由子类实现。 总的来说,C#中的抽象类是实现多态性和设计模式的重要工具。它们为子类提供了一种共享行为和...
模板设计模式是一种行为型设计模式,它定义了一个算法的骨架,并允许子类为算法的某些步骤提供具体的实现。通过这种方式,算法的基本流程保持不变,但各个步骤可以根据实际需求进行定制。 在给出的部分代码中,我们...
模板模式是一种设计模式,它是行为设计模式的一种,用于在不同情况下定义算法的框架,而将具体的操作留给子类去实现。这种模式的核心思想是封装不变的部分,扩展可变的部分,从而实现代码的复用和扩展。 模板模式的...
抽象工厂模式是一种设计模式,属于创建型模式,它提供了一种创建对象族的接口,而无需指定其具体的类。在软件工程中,当系统需要创建的对象具有家族关系,且家族内的对象都是一起使用的,那么抽象工厂模式就是一种...
此外,工厂方法(Factory Method)模式也会利用抽象类来创建对象。 4. **代码封装**:抽象类可以封装公共的属性和方法,避免重复代码,提高代码复用性。抽象方法提供了一个统一的调用接口,让子类根据需要进行具体...
Java代码积累:并发 设计模式 数据结构 使用容器 实用 类 基础知识 并发性 演示线程的生命周期 生产者-消费者 设计模式参考《大话设计模式》 工厂简单模式 创造型模式 工厂方法模式 抽象工厂模式 原型模式 建造者...
Java中,通过抽象类定义模板方法,子类实现具体步骤。 - **观察者模式**:定义对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。Java中,`java.util.Observable`和...
Java中通过抽象类和具体子类实现。 23. **访问者模式(Visitor)**:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。Java中通过访问者接口和元素...
这个压缩包文件“常见设计模式的解析和实现(C__).zip”包含了对多种设计模式的深入解析和C++实现,对于提升开发者的设计能力和代码质量有着重要作用。 1. **单例模式**:确保一个类只有一个实例,并提供一个全局...
理解并掌握Java中的抽象类与接口的区别,有助于开发者根据需求选择合适的设计模式,优化代码结构,提高代码的可维护性和扩展性。在实际开发中,往往需要结合使用抽象类和接口,以充分利用两者的优势,实现更灵活和...
而模板设计模式则是一种行为设计模式,它提供了一种方法的通用实现,允许子类在不改变整体结构的情况下,定制特定的步骤。当我们将这两种概念结合时,我们可以通过Template模式来优雅地处理事务的控制。 首先,让...
本篇文章将基于"Go语言设计模式待代码简单实现"这一主题,探讨Go语言中常见的设计模式及其应用。 1. 工厂模式:工厂模式是创建型设计模式的一种,它提供了一种创建对象的最佳方式。在Go语言中,可以通过定义一个...
通过抽象类,可以设计出一种统一的编程模式,使得不同类型的对象可以以相同的方式进行处理。 Q&A 部分可能涵盖了一些常见的问题和解答,比如: 1. 为什么需要抽象类? - 因为它们提供了多态的基础,使得代码更加...