`

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

阅读更多

策略模式

1.定义

       定义一系列的算法,把它们一个个封装起来,并且使特们可相互替换。本模式使得算法可独立与使用它的客户而变化。

2.示例代码

        展示了多种工资支付方式的策略。

 

/*支付工资的策略接口,公司有多种支付工资的算法*/
public interface PaymentStrategy{
    //支付工资的算法,传入算法所需的数据,上下文 
    public void pay(PaymentContext ctx);
}

/*人民币现金支付策略*/
public class RMBCash implements PaymentStrategy{
     public void pay(PaymentContext ctx){
         System.out.println("现在给" + ctx.getUserName() + "人民币现金支付" + ctx.getMoney() + "元");
     }
}

/*美元现金支付策略*/
public class DollarCash implements PaymentStrategy{
     public void pay(PaymentContext ctx){
         System.out.println("现在给" + ctx.getUserName() + "美元现金支付" + ctx.getMoney() + "元");
     }
}

   

/*支付工资的上下文,每个人的工资不同,支付方式也不同*/
public class PaymentContext{
    private String userName = null;
    private double money = 0.0;
    //支付工资的策略接口
    public PaymentStrategy strategy = null;
    //构造方法传入被支付工资的人员,应支付的金额和具体的支付策略
    public PaymentContext(String userName,double money,PaymentStrategy strategy){
         this.userName = userName;
         this.money = money;
         this.strategy = strategy;
    }
    public String getUserName(){
          return userName;
    }
    public double getMoney(){
          return money;
    }
    //支付工资
    public void payNow(){
        //使用客户希望的支付策略来支付
        this.strategy.pay(this);
    }
}

  

/*客户端支付工资*/
public class Client{
    //创建相应的支付策略
    PaymentStrategy strategyRMB = new RMBCash();
    PaymentStrategy strategyDollar = new DollarCash();
    //给小李支付工资
    PayContext ctx1 = new PayContext("小李",5000,strategyRMB);
    ctx1.payNow();
    //给petter支付工资
    PayContext ctx2 = new PayContext("petter",3000,strategyDollar);
    ctx2.payNow();
}

 

3.实际应用

     策略模式的一系列策略算法是平等的,是可以通过if-else结构来组织的,这些算法的地位是平等的,可以相互替换的。如果策略过多会导致相应的对象过多。

 

策略模式的本质:分离算法,选择实现
分享到:
评论

相关推荐

    设计模式课件大全

    PPT内容包括:内附代码,实例,方便理解。 继承、封装、多态、UML 设计模式02 设计模式03-创建型模式 ...设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。

    JAVA设计模式例程-策略模式

    在众多的设计模式中,策略模式(Strategy Pattern)是一种行为设计模式,它使你能在运行时改变对象的行为。在这个“JAVA设计模式例程-策略模式”的压缩包中,我们可以深入探讨策略模式的原理及其应用。 策略模式的...

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

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

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 策略模式(Strategy):定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。 - 模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 - 访问者模式...

    java设计模式--策略模式

    策略模式是Java设计模式中的一种行为模式,它允许在运行时选择算法或策略,从而提供了更大的灵活性。在HeadFirst的《设计模式》一书中,第一章深入浅出地讲解了这一模式,通过实例帮助读者理解其核心概念和应用场景...

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

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

    设计模式--策略模式StrategyPattern

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

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

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

    设计模式---策略者模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要在不同时间或根据不同条件执行不同算法的情况。策略模式允许我们将算法封装到独立的可互换的策略类中,使得算法的变化...

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

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

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

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

    设计模式-策略者

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

    android应用开发设计模式之-策略模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java编程语言中,尤其是在Android平台上,这种模式能够使我们的代码更加灵活、可扩展且易于维护。 策略模式的核心思想是定义一系列算法,并将每个...

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

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

    设计模式系列博客--策略模式

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

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

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

    设计模式教程-策略模式

    策略模式是一种设计模式,它将特定情境下的行为或算法封装为独立的对象,使得这些行为可以在运行时动态地互换而不影响整体系统结构。这种模式强调的是将策略对象和使用策略的上下文对象解耦,从而提高了代码的灵活性...

    Java设计模式教程-策略模式Java开发Java经验技

    策略模式是Java设计模式中的一种行为模式,它允许在运行时改变对象的行为。在Java开发过程中,策略模式常被用来封装一系列算法,并使它们可以互相替换,从而使算法的变化独立于使用算法的客户。这种模式的核心在于...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的...

Global site tag (gtag.js) - Google Analytics