`
wuhongyu
  • 浏览: 406917 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

JAVA设计模式学习笔记1——策略模式

阅读更多

各种资料对设计模式定义说法不一,也没有人给出一个像课本一样的定义,但核心思想是一致的,本文对于各种模式的定义部分摘自《HEAD FIRST设计模式》,部分摘自网络,还有一部分为自己理解,对于各种模式的理解,如有不正确的,欢迎批评指正。

 

目录:

1、策略模式

2、观察者模式

3、装饰模式

4、工厂模式

5、单例模式

 

策略模式——定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
    策略模式是说,针对一种计算,定义一系列的算法,由用户决定具体使用哪一个算法完成计算。

 

    比如,提供一个计算银行存款利率的接口,对于不同的存款方式(活期、一年定期、两年定期),提供不同的算法实现类,由用户决定使用哪种存款方式来计算利率。如果银行计算利率的算法发生了变化(如又增加了三年定期、五年定期的算法),对于用户的使用不产生任何影响,因为用户使用的是统一的计算接口,也符合了针对接口编程,不针对实现编程的设计原则。

 

定义一个计算存款利率的接口:

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);
	}
}

 

分享到:
评论
1 楼 di1984HIT 2015-02-06  
写的很好啊

相关推荐

    java设计模式学习笔记

    ### Java设计模式学习笔记——外观模式(Facade Pattern) #### 概述 设计模式是软件工程领域中一种解决常见问题的可复用解决方案。在Java开发过程中,掌握设计模式能够帮助开发者更好地组织代码结构,提高代码的...

    Java学习笔记——良葛格

    【Java学习笔记——良葛格】是一份由爱好者良葛格整理的Java学习资料,主要以PDF格式呈现,虽然可能不完整,但包含了丰富的Java编程基础知识和实践技巧,旨在为初学者提供一个学习和参考的平台。以下是笔记中可能...

    JAVA学习笔记第七天——示例代码Day07

    在"JAVA学习笔记第七天——示例代码Day07"的压缩包中,你可以找到相关的示例代码,包括这些概念的实际应用。通过阅读和实践这些代码,你将更深入地理解访问修饰符、final关键字、接口以及接口和类的关系在实际编程中...

    学习笔记——资料

    【Java学习笔记——全面解析】 Java作为一种广泛应用的高级编程语言,是软件开发领域的核心力量。这份"学习笔记——资料"涵盖了Java学习的各个方面,旨在帮助初学者和有经验的开发者巩固基础,提升技能。以下是对这...

    Java入门学习笔记

    "Java入门第三季学习笔记"可能涵盖了更多高级话题,如反射、注解、设计模式和Java库的使用。反射允许程序在运行时检查类、接口、字段和方法的信息,提供了更大的灵活性。注解是一种元数据,可以用来提供编译器或运行...

    Java NIO学习笔记——ByteBuffer用法

    ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。ByteBuffer是一个字节缓冲区,可以存储字节序列。在NIO中,所有的数据读写都通过缓冲区进行,ByteBuffer与其他类型的Buffer...

    个人学习的java笔记——思维导图

    这份"个人学习的java笔记——思维导图"是作者学习Java过程中的总结,通过思维导图的形式,将复杂的概念和知识结构化,便于理解和记忆。下面,我们将深入探讨其中涉及的一些关键知识点。 1. **基础语法**:Java的...

    java设计模式(收集整理,学习笔记)

    Java设计模式是软件开发中的一种重要思想,它是一种在特定情境下解决常见问题的模板,可以提高代码的可重用性、可维护性和灵活性。在Java中,设计模式主要分为三大类:创建型、结构型和行为型。下面将详细讨论在给定...

    Java中jqGrid 学习笔记整理——进阶篇(二)

    在本篇Java中jqGrid的学习笔记整理中,我们将聚焦于jqGrid与后台Java服务的数据交互。jqGrid是一款强大的JavaScript库,用于创建动态、交互式的表格,而这里的进阶篇(二)将涉及到如何通过Java后端来提供数据支持。 ...

    java多线程学习笔记02(csdn)————程序.pdf

    在这个学习笔记中,主要讨论了Java中的线程同步机制,包括volatile关键字、synchronized以及Lock接口,特别是ReentrantLock的使用。 首先,对于线程1和线程2的疑惑,调试(debug)模式并不能改变线程的执行顺序。...

    jsp学习笔记——初学者的选择

    【JSP学习笔记——初学者的选择】 JSP(JavaServer Pages)是JavaEE平台中用于构建动态网页的应用技术。作为初学者,理解JSP的基本概念和技术特性至关重要。 1. **为何选择JSP?** JSP的出现主要是为了解决...

    Thinking in Java 自学笔记——第一章 对象导论

    Thinking in Java 自学笔记——第一章 对象导论 本章节总结了面向对象程序设计(Object-oriented Programming, OOP)的基本概念和原则,以帮助读者更好地理解 Java 编程语言。以下是对标题、描述、标签和部分内容的...

    从Java菜鸟到专家的资料

    8. **JAVA设计模式.chm**:设计模式是软件工程中的重要概念,这本书详细介绍了23种经典设计模式,如单例模式、工厂模式、观察者模式等,对提升代码质量和可维护性有极大帮助。 9. **Oracle optimizer.chm**:可能...

    J2EE学习笔记--DAO设计模式基础.txt

    ### J2EE学习笔记——DAO设计模式基础 #### 一、引言 在J2EE(Java 2 Enterprise Edition)开发中,DAO (Data Access Object) 设计模式是一种常用的数据访问层实现方式,用于分离业务逻辑与数据访问逻辑,使得程序...

    良葛格Java JDK 5.0 学习笔记 - 文字编辑器制作

    综上所述,《良葛格Java JDK 5.0 学习笔记——文字编辑器制作》不仅提供了关于Java编程的具体指导,还深入探讨了软件工程的最佳实践,如需求分析、设计模式、界面设计原则以及持续集成和重构等高级主题。这对于初学...

    java学习笔记

    ### Java学习笔记知识点详解 #### 一、Java面向对象编程思想 面向对象编程(Object-Oriented Programming, OOP)是Java的核心特性之一。通过封装、继承和多态这三个基本特征来实现。OOP能够提高代码的复用性和可...

    重新整理后的Oracle OAF学习笔记——离线版本

    - **ebs_build_*.html** 文件(如ebs_build_control.html、ebs_build_model.html、ebs_build_view.html)可能讨论了OAF的构建过程,包括控制、模型和视图的构建,这是MVC设计模式的体现。 - **ebs_page.html**:...

    MLDN——Java Web 开发实战经典源码笔记(基础篇)|

    《MLDN——Java Web开发实战经典源码笔记(基础篇)》是一本专注于Java Web开发的实战教程,旨在帮助读者从零开始掌握Web应用的开发技术。这本书通过深入浅出的讲解和丰富的实例代码,全面介绍了Java Web开发的基础...

    我的学习笔记——J2EE

    J2EE,全称为Java 2 Platform, Enterprise Edition,是一个用于构建企业级应用程序的Java平台。它提供了服务器端的编程模型,包括Servlet、JavaServer Pages (JSP)、JavaBeans、EJB (Enterprise JavaBeans)等技术,...

Global site tag (gtag.js) - Google Analytics