`
wangkechao.dream
  • 浏览: 46007 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
352630cf-f670-3416-b946-55dec5cd787c
设计模式
浏览量:30052
社区版块
存档分类
最新评论

4.设计模式之策略模式

阅读更多

1. 什么是策略模式?

策略模式针对的是在不同的环境中,客户端选择使用不同的策略。

2. 为什么使用策略模式?

当增加一种新的算法的时候,只需要在客户端登记即可。相当于“可插入的算法”。扩展性更好。

3. 什么时候使用策略模式?

如果一个系统需要动态的从几种算法中选择一种算法。则使用策略模式。

4. 策略模式在java中的应用

比如说 awt包中的Container提供了不同的排列方式,BorderLayout , FlowLayout,BirdLayout等。

 

我的理解,是有一个策略类【包括实现了该策略的具本类】以及注册了相应策略的具体实现类,如果策略需要做变动则只需改变实现策略的代码,而无需修注册了该策略的客户端

Example: 移动短信有两种策略:全球通用户  神州行用户 不同用户扣费标准不同

1. 策略接口

public interface ISMSStrategy {
	//做一件事情,扣钱
	public void deductMoney(User user);
}

 2. 全球通策略实现类

 

public class GSMSMSStrategy implements  ISMSStrategy{
	
	//全球通-100块钱
	public void deductMoney(User user){
		System.out.println("全球通执行策略以前"+user.getMoney());
		user.setMoney(user.getMoney()-200);
		System.out.println("全球通执行策略以后"+user.getMoney());
	}
}

 3. 神州行实现类

 

public class EasyownStrategy implements ISMSStrategy{

	//神州行用户-200
	public void deductMoney(User user) {
		System.out.println("神州行执行策略以前"+user.getMoney());
		user.setMoney(user.getMoney()-100);
		System.out.println("神州行执行策略以后"+user.getMoney());
	}
}

 4. 定义一个用户实体

 

public class User {
	public int money;
	/*实现策略模式的重点在这里*/
	public ISMSStrategy smsStrategy;//该用户 办理的业务套餐

 
	public int getMoney() {
		return money;
	}

	public void setMoney(int money) {
		this.money = money;
	}

	public ISMSStrategy getSmsStrategy() {
		return smsStrategy;
	}

	public void setSmsStrategy(ISMSStrategy smsStrategy) {
		this.smsStrategy = smsStrategy;
	}
}

 

 

5. 再定义一个结算器

public class Balance {
   //月末结算了
	public void deductMoney(User user){
		user.getSmsStrategy().deductMoney(user);
	}
}

 6. 程序入口

 

public class Main {
	
	public static void main(String[] args) {
		Balance balance = new Balance();
		//定义 一个神州行的用户
		ISMSStrategy easyownStrategy =  new EasyownStrategy();
		User easyownUser = new User();
		easyownUser.setMoney(1000);
		//办理了一个神州行短信套餐
		easyownUser.setSmsStrategy(easyownStrategy);
		System.err.println("神州行的用户到了月末结算的时候");
		//到了月末结算
		balance.deductMoney(easyownUser);
		// 定义 一个全球通的用户
		ISMSStrategy GSMStrategy = new GSMSMSStrategy();
		User gsmUser = new User();
		gsmUser.setMoney(1000);
		// 办理了一个全球通短信套餐
		gsmUser.setSmsStrategy(GSMStrategy);
		System.err.println("全球通的用户到了月末结算的时候");
		// 到了月末结算
		balance.deductMoney(gsmUser);
	}
}

 整套代码实现了是一个策略模式的完整实现

 

如果哪天全球通的资费需要做修改,只需要修改GSMSMSStrategy类里面的deductMoney(User user)方法,User类是不用修改的

 

我也是初学,HY批评指正,共同进步

 

参考源文档 <http://blog.csdn.net/hu_xinxin/article/details/9209677> ,此处致谢

返回导航

 

分享到:
评论
3 楼 打不死小神童 2015-08-28  
2 楼 wangkechao.dream 2013-07-11  
maizi11 写道
恩 简单易懂!主要是领会了意思~加油噢


1 楼 maizi11 2013-07-11  
恩 简单易懂!主要是领会了意思~加油噢

相关推荐

    10.设计模式-策略模式1

    策略模式是一种设计模式,它允许程序在运行时选择不同的算法或行为,而不是在编译时就固定下来。这种模式的核心思想是将算法封装在独立的策略类中,使得算法的变化不会影响到使用算法的客户端代码。通过这种方式,...

    【Java设计模式】《设计模式之禅》中的23种设计模式.zip

    【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种...

    设计模式之策略模式 鸭子问题

    设计模式之策略模式 鸭子问题 策略模式是一种经典的设计模式,通过鸭子问题,可以让学习者更好地了解设计模式的概念和实现。策略模式的主要思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    设计模式之策略模式

    设计模式中的策略模式。根据《设计模式》一书编写

    java.设计模式大作业 薪资交付系统

    在Java编程领域,设计模式是一种解决常见问题的模板或最佳实践,它被广泛应用于构建可扩展、可维护的软件系统。在这个"薪资交付系统"的大作业中,我们可以预期会涉及多种设计模式,这些模式将帮助我们高效地组织代码...

    设计模式_源代码大全.zip

    设计模式_源代码大全.zip 包括:1.简单工厂模式 2.策略模式 3.装饰模式 4.代理模式 5.工厂方法模式 6.原型模式 7.模板方法模型 8.外观模式 9.建造者模式 10.观察者模式 11.抽象工厂模式 12.状态模式 13.适配器模式 ...

    设计模式解读之--策略模式.pdf

    ### 设计模式解读之策略模式 #### 模式定义与核心思想 策略模式是一种行为设计模式,它使得算法可以独立于使用它的客户而变化。在软件工程中,策略模式允许一组算法封装成一系列的类,它们共享相同的接口,但内部...

    Java 23种设计模式全归纳.zip

    设计模式单例设计模式(Singleton Pattern)完全解析4.设计模式 策略模式(Strategy Pattern)以角色游戏为背景5.设计模式 适配器模式(Adapter Pattern)以手机更换为例6.设计模式 命令模式(Command Pattern) 管理智

    设计模式之策略模式源码

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或场景来改变算法的情况。策略模式就是为了解决这类问题而诞生的,它将每种算法封装到具有共同接口的...

    策略模式.rar策略模式.rarjava设计模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件工程中,我们经常遇到需要根据不同的条件或时间点执行不同算法的情况。策略模式提供了一种将算法族封装到各自独立的类中,并让它们之间可以互相...

    55-Java设计模式之策略模式与状态模式1

    Java 设计模式之策略模式与状态模式 策略模式是 Java 中的一种设计模式,它主要用于解决系统与第三方接口进行数据交互的问题。当系统需要与多种格式的数据进行交互时,使用策略模式可以很好地解决这个问题。例如,...

    走进设计模式之 策略模式(Strategy)

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件设计中,有时我们需要根据不同的场景或条件选择不同的算法或行为。策略模式允许我们将这些算法封装成独立的类,每个类代表一种策略,然后在运行...

    深入理解JavaScript系列.chm

    33.设计模式之策略模式 34.设计模式之命令模式 35.设计模式之迭代器模式 36.设计模式之中介者模式 37.设计模式之享元模式 38.设计模式之职责链模式 39.设计模式之适配器模式 40.设计模式之组合模式 41.设计模式之...

    设计模式之策略模式Java实现和类设计图

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常涉及定义一系列算法,将每个算法封装到具有共同接口的独立类中,使得它们可以相互替换。这样做的主要好处是算法的变化不会影响...

    java 23种设计模式.zip

    设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象...4.行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

Global site tag (gtag.js) - Google Analytics