各种资料对设计模式定义说法不一,也没有人给出一个像课本一样的定义,但核心思想是一致的,本文对于各种模式的定义部分摘自《HEAD FIRST设计模式》,部分摘自网络,还有一部分为自己理解,对于各种模式的理解,如有不正确的,欢迎批评指正。
目录:
策略模式——定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
策略模式是说,针对一种计算,定义一系列的算法,由用户决定具体使用哪一个算法完成计算。
比如,提供一个计算银行存款利率的接口,对于不同的存款方式(活期、一年定期、两年定期),提供不同的算法实现类,由用户决定使用哪种存款方式来计算利率。如果银行计算利率的算法发生了变化(如又增加了三年定期、五年定期的算法),对于用户的使用不产生任何影响,因为用户使用的是统一的计算接口,也符合了针对接口编程,不针对实现编程的设计原则。
定义一个计算存款利率的接口:
public interface IRateCalculator { public double calculate(double amount); }
计算活期存款利率的实现类:
public class CurrentRateCalcalator implements IRateCalculator { private double rate = 0.035; /** * 计算活期存款利率 */ @Override public double calculate(double amount) { return amount * rate; } }
计算一年定期存款利率的实现类:
public class OneYearRateCalculator implements IRateCalculator { private double rate = 0.0325; /** * 计算一年定期存款利率 */ @Override public double calculate(double amount) { return amount * rate; } }
计算两年定期存款利率的实现类:
public class TwoYearRateCalculator implements IRateCalculator { private double rate = 0.0375; /** * 计算两年定期存款利率 */ @Override public double calculate(double amount) { return amount * rate; } }
测试类:
public class Test { /** * 策略模式——定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 * * 针对一种计算,定义一系列的算法,由用户决定具体使用哪一个算法完成计算。 * @param args */ public static void main(String[] args) { //假设有100块钱的本金 double amount = 100; double rate; IRateCalculator rateCalculator; //计算活期存款利率 rateCalculator = new CurrentRateCalcalator(); rate = rateCalculator.calculate(amount); System.out.println("活期存款利率为:" + rate); //计算一年定期存款利率 rateCalculator = new OneYearRateCalculator(); rate = rateCalculator.calculate(amount); System.out.println("一年定期存款利率为:" + rate); //计算两年定期存款利率 rateCalculator = new TwoYearRateCalculator(); rate = rateCalculator.calculate(amount); System.out.println("两年定期存款利率为:" + rate); } }
相关推荐
### Java设计模式学习笔记——外观模式(Facade Pattern) #### 概述 设计模式是软件工程领域中一种解决常见问题的可复用解决方案。在Java开发过程中,掌握设计模式能够帮助开发者更好地组织代码结构,提高代码的...
【Java学习笔记——良葛格】是一份由爱好者良葛格整理的Java学习资料,主要以PDF格式呈现,虽然可能不完整,但包含了丰富的Java编程基础知识和实践技巧,旨在为初学者提供一个学习和参考的平台。以下是笔记中可能...
在"JAVA学习笔记第七天——示例代码Day07"的压缩包中,你可以找到相关的示例代码,包括这些概念的实际应用。通过阅读和实践这些代码,你将更深入地理解访问修饰符、final关键字、接口以及接口和类的关系在实际编程中...
【Java学习笔记——全面解析】 Java作为一种广泛应用的高级编程语言,是软件开发领域的核心力量。这份"学习笔记——资料"涵盖了Java学习的各个方面,旨在帮助初学者和有经验的开发者巩固基础,提升技能。以下是对这...
"Java入门第三季学习笔记"可能涵盖了更多高级话题,如反射、注解、设计模式和Java库的使用。反射允许程序在运行时检查类、接口、字段和方法的信息,提供了更大的灵活性。注解是一种元数据,可以用来提供编译器或运行...
ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。ByteBuffer是一个字节缓冲区,可以存储字节序列。在NIO中,所有的数据读写都通过缓冲区进行,ByteBuffer与其他类型的Buffer...
这份"个人学习的java笔记——思维导图"是作者学习Java过程中的总结,通过思维导图的形式,将复杂的概念和知识结构化,便于理解和记忆。下面,我们将深入探讨其中涉及的一些关键知识点。 1. **基础语法**:Java的...
Java设计模式是软件开发中的一种重要思想,它是一种在特定情境下解决常见问题的模板,可以提高代码的可重用性、可维护性和灵活性。在Java中,设计模式主要分为三大类:创建型、结构型和行为型。下面将详细讨论在给定...
在本篇Java中jqGrid的学习笔记整理中,我们将聚焦于jqGrid与后台Java服务的数据交互。jqGrid是一款强大的JavaScript库,用于创建动态、交互式的表格,而这里的进阶篇(二)将涉及到如何通过Java后端来提供数据支持。 ...
在这个学习笔记中,主要讨论了Java中的线程同步机制,包括volatile关键字、synchronized以及Lock接口,特别是ReentrantLock的使用。 首先,对于线程1和线程2的疑惑,调试(debug)模式并不能改变线程的执行顺序。...
【JSP学习笔记——初学者的选择】 JSP(JavaServer Pages)是JavaEE平台中用于构建动态网页的应用技术。作为初学者,理解JSP的基本概念和技术特性至关重要。 1. **为何选择JSP?** JSP的出现主要是为了解决...
Thinking in Java 自学笔记——第一章 对象导论 本章节总结了面向对象程序设计(Object-oriented Programming, OOP)的基本概念和原则,以帮助读者更好地理解 Java 编程语言。以下是对标题、描述、标签和部分内容的...
8. **JAVA设计模式.chm**:设计模式是软件工程中的重要概念,这本书详细介绍了23种经典设计模式,如单例模式、工厂模式、观察者模式等,对提升代码质量和可维护性有极大帮助。 9. **Oracle optimizer.chm**:可能...
### J2EE学习笔记——DAO设计模式基础 #### 一、引言 在J2EE(Java 2 Enterprise Edition)开发中,DAO (Data Access Object) 设计模式是一种常用的数据访问层实现方式,用于分离业务逻辑与数据访问逻辑,使得程序...
综上所述,《良葛格Java JDK 5.0 学习笔记——文字编辑器制作》不仅提供了关于Java编程的具体指导,还深入探讨了软件工程的最佳实践,如需求分析、设计模式、界面设计原则以及持续集成和重构等高级主题。这对于初学...
### Java学习笔记知识点详解 #### 一、Java面向对象编程思想 面向对象编程(Object-Oriented Programming, OOP)是Java的核心特性之一。通过封装、继承和多态这三个基本特征来实现。OOP能够提高代码的复用性和可...
- **ebs_build_*.html** 文件(如ebs_build_control.html、ebs_build_model.html、ebs_build_view.html)可能讨论了OAF的构建过程,包括控制、模型和视图的构建,这是MVC设计模式的体现。 - **ebs_page.html**:...
《MLDN——Java Web开发实战经典源码笔记(基础篇)》是一本专注于Java Web开发的实战教程,旨在帮助读者从零开始掌握Web应用的开发技术。这本书通过深入浅出的讲解和丰富的实例代码,全面介绍了Java Web开发的基础...
J2EE,全称为Java 2 Platform, Enterprise Edition,是一个用于构建企业级应用程序的Java平台。它提供了服务器端的编程模型,包括Servlet、JavaServer Pages (JSP)、JavaBeans、EJB (Enterprise JavaBeans)等技术,...