`
wuhongyu
  • 浏览: 404329 次
  • 性别: 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  
写的很好啊

相关推荐

Global site tag (gtag.js) - Google Analytics