`
云上太阳
  • 浏览: 131312 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

设计模式-策略模式

阅读更多

一、策略模式

                                                                              ——我一直不太信任自己的记忆力,所以我把它们都写下来 

 23种设计模式基本上都是在大量的实践经验中抽象出来的,虽然我们目前经验还没能达到那种程度,但是一定的时间后翻看设计模式,发现有一部分似曾相识,这不就是我常用的吗?是不是内心一阵窃喜啊。

 

策略模式跟模板模式确实有一点像,但是区别还是比较明显的,有必要的话看下上一篇博客设计模式-模板模式(http://zyqwst.iteye.com/admin/blogs/2285300/)。

    

策略模式:策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。

定义看起来比较抽象,直白来说就是把一系列不同的算法封装到具有共同接口的实现类中。调用者根据情境调用不同的实现类。下面类图中,调用者根据需求选择调用StrategyA或StratebyB。



 

下面看一个Demo:某商品按照顾客Customer,会员VIP,超级会员SVIP有不同的打折力度;分别是不打折、减10%,减20%。根据顾客计算相应的价格。

/**
 * 价格类
 * @author albert
 *
 */
public class Price {
	/**假设商品单价为10元*/
	private Double price=10.00d;
	/**
	 * 按照顾客类型返回实际单价
	 * @param discount 打折策略
	 * @return
	 */
	public Double actualPrice(Discount discount){
		return price*discount.getDiscount();
	}
}


/**打折接口*/
public interface Discount {
	public Double getDiscount();
}

/**会员打折*/
public class VipDiscount implements Discount{
        public Double getDiscount(){
               return 0.9d;
        }
}

/**超级会员打折*/
public class SVipDiscount implements Discount{
        public Double getDiscount(){
               return 0.8d;
        }
}


/**普通顾客不打折*/
public class MemberDiscount implements Discount{
        public Double getDiscount(){
               return 1d;
        }
}

 打折接口Discount;根据三种客户类型有三种打折实现。下面是测试类

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Price price = new Price();
		Double actualPrice = price.actualPrice(new VipDiscount());//假设是会员,打9折
                System.out.println(actualPrice);//结果是9
	}

}

 

从例子可以得出结论:算法的选择是平等的,算法的选择完全依赖于调用者当时的情境。策略模式的侧重不是算法的实现,而是对这些算法如何组织和调用。从而让程序更加灵活,具有更好的维护性和扩展性。这也是策略模式相对于模板方法模式的一大区别。

  • 大小: 83.8 KB
1
5
分享到:
评论
1 楼 luori521 2016-03-31  
会员打折 类和 普通顾客不打则 类是一样的。

相关推荐

    php设计模式-策略模式-例题学习

    在这个"php设计模式-策略模式-例题学习"的例子中,我们将深入理解策略模式的运用及其在PHP中的实现。 首先,让我们来看看核心的类和接口: 1. `HandStrategyInterface.php`: 这个文件定义了一个接口`...

    java设计模式-策略模式

    在这个“java设计模式-策略模式”的示例中,我们将深入探讨如何使用策略模式来实现一个简单的超市促销系统。 策略模式的核心思想是定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。这使得算法的...

    设计模式-策略模式-c++版

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在C++中,策略模式主要用于封装一系列算法,并让它们之间可以互相替换,使得算法的变化独立于使用算法的客户。这种模式通常涉及三个主要角色:策略...

    设计模式-策略模式源代码

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在.NET开发中,策略模式经常被用来处理算法的可变性和封装多种算法于一个系统的情况。此压缩包文件包含的是关于策略模式的源代码示例,以及可能的一个...

    java常用设计模式-策略模式

    策略模式是一种行为型设计模式,它允许您定义一系列算法,将每个算法封装起来,并使它们可以互换使用。这种模式使得算法可以独立于使用它们的客户端而变化。在 Java 中,策略模式通常由一个接口和多个实现该接口的类...

    Java设计模式-策略模式

    策略模式作为其中一种行为设计模式,它的主要目的是使算法族能够互换,让算法的变化独立于使用它的客户端。策略模式使得代码更加灵活,易于扩展,并且能够降低系统的耦合度。 策略模式的核心思想是定义一系列的算法...

    设计模式-策略模式(Strategy)

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。这种模式允许你使用算法族,而无需在代码中硬编码这些算法。通过将算法封装到具有共同接口的独立对象中,策略模式使得你可以根据需要灵活地切换算法,...

    c++设计模式-行为型模式-策略模式

    c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...

    深入浅出设计模式-策略模式 ipad、iphone开发实现

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在iOS开发中,特别是在iPad和iPhone应用的实现过程中,策略模式可以帮助我们处理复杂的业务逻辑,使得代码更灵活、可扩展性更强。 《深入浅出设计...

    JAVA-设计模式-行为型模式-策略模式

    JAVA-设计模式-行为型模式-策略模式

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

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

    设计模式 - 策略模式(C++实例)

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

    Java 设计模式-策略模式(Strategy)Android讲解

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式是通过定义一系列算法,并将每个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户而变化。这种模式在Android开发中...

    设计模式-策略者

    在《设计模式-策略者》这篇文章中,作者深入浅出地介绍了策略模式的基本概念、结构和实现方式。文章可能涵盖了以下几个关键知识点: 1. **模式定义**:策略模式允许在运行时选择不同的算法或策略,提供了一种用面向...

    设计模式--策略模式java例子

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常用于替换硬编码的条件语句,使代码更加灵活、可扩展和易于维护。下面我们将详细探讨策略模式的核心概念、实现方式以及在实际...

    C++设计模式--基于Qt4开源跨平台开发框架

    《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...

    java设计模式--策略模式

    Java设计模式——策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。策略模式定义了一族算法,并将每一个算法封装起来,使它们可以互相替换。这种模式让算法的变化独立于使用算法的客户。 在Java中,...

    北大青鸟设计模式--策略模式

    北大青鸟关于设计模式的PPT,讲述的非常清晰,对于初学设计模式的人来说,非常有用。本篇是关于策略模式的PPT

Global site tag (gtag.js) - Google Analytics