码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式—策略模式

时间:2015-06-01 13:21:39      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:java   设计模式   策略模式   

设计模式之策略模式

 

因为是跟工厂模式一同看的策略模式,刚开始还真没发现他们之间的区别。主要是《大话设计模式》书的作者在策略模式中用到了工厂模式。其实工厂模式是实现策略模式的一种方式,而具体策略模式是怎么样的,核心是什么,下面我们可以总结出来:

 

1、策略模式根本上来说就是封装了算法,不考虑具体实现,只考虑得到结果的模式。因此策略模式又叫算法簇模式,定义不同的算法,并且具体算法之间可以互相替换。

2、策略模式的关键好处在于动态改变对象的行为

3、策略模式将算法单独拿出来,然后将封装了的算法进行抽象,再具体实现这些抽象接口(可以重点考虑工厂模式来实现,呵呵,容易搞混淆)

 

参考《大话设计模式》中开发商场促销软件的例子来说明策略模式

 

自己学着敲敲策略模式的实现代码

 

package strategy_simple;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class strategy_simple {

	private final String DAZHE = "打折";
	private final String MANFAN = "满反";
	private final String ZHENGCHANG = "正常";

	private Idaz mdaz;

	public strategy_simple() throws IOException, MyException {
		BufferedReader BReader = new BufferedReader(new InputStreamReader(
				System.in));
		System.out.println("请输入账单金额: " + "\n");
		String str = BReader.readLine();

		// 输出打折后的信息
		// new daZ(1, 1500, 50, 0.8, 0, 0, 2500);
		this.mdaz = getIdaz(MANFAN);
		this.getResult(Double.valueOf(str), mdaz);

	}

	private double getResult(double total, Idaz idaz) throws MyException {
		if(idaz != null){
			System.out.println(idaz.getResult(total));
			return 0;
		}
		else
			throw new MyException();
	}

	private Idaz getIdaz(String kind) {
		switch (kind) {
		case DAZHE:
			return new dazhe_celue();
		case MANFAN:
			return new dazhe_celue2();
		case ZHENGCHANG:
			return new dazhe_celue3();
		default:
			break;
		}
		return null;
	}

	public static void main(String[] args) {
		try {
			new strategy_simple();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (MyException e) {
			e.printStackTrace();
		}
	}
}

class MyException extends Exception{

	@Override
	public void printStackTrace() {
		super.printStackTrace();
		System.out.println("construct error");
	}
}

interface Idaz {
	abstract double getResult(double total);
}

class dazhe_celue implements Idaz {

	@Override
	public double getResult(double total) {
		System.out.println("这是打八折方式 :");
		return total * 0.8;
	}

}

class dazhe_celue2 implements Idaz {

	@Override
	public double getResult(double total) {
		System.out.println("这是满**减**的优惠方式 :");

		return total - 100;
	}
}

class dazhe_celue3 implements Idaz {

	@Override
	public double getResult(double total) {
		System.out.println("这是正常收费方式 :");
		return total;
	}
}

设计模式—策略模式

标签:java   设计模式   策略模式   

原文地址:http://blog.csdn.net/feishangbeijixing/article/details/46303715

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!