`
geeksun
  • 浏览: 964975 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式之---策略模式

 
阅读更多

策略模式,顾名思义,是使用不同的策略解决问题的模式,孙悟空有七十二变,孙子兵法有三十六计,这里的七十二变和三十六计里的每一个变法和计谋,都是一种策略。需要当事者根据具体的情形,去做选择变成什么和使用哪一个计谋。

 

1. 策略模式类图



 


2. 策略模式的组成:

抽象策略基类、策略实现类、调用者。

基类中有抽象的算法,实现类实现具体和算法行为,调用者类持有策略接口的引用,可以灵活调用不同实现类的策略。

 

 

3. design example

以外出旅行为例,有各种不同的旅行方式。

策略抽象基类

/**
 * 策略抽象基类, 具有抽象行为接口
 */
public interface TravelStrategy {
    public void travel();
}

 

实现类:骑行旅行

public class BikeTravel implements TravelStrategy {
    @Override
    public void travel() {
        System.out.println("Travel by Bike.");
    }
}

 

实现二:火车旅行

public class RailWayTravel implements TravelStrategy {
    @Override
    public void travel() {
        System.out.println("Travel by RailWay.");
    }
}

 

实现三:徒步旅行

public class WalkTravel implements TravelStrategy {
    @Override
    public void travel() {
        System.out.println("Travel by Walk.");
    }
}

 

调用者类:旅客

/**
 * 策略调用类, 持有策略的引用
 */
public class Person {

    private Long id;
    private String name;

    private TravelStrategy strategy;

    public void setStrategy(TravelStrategy strategy) {
        this.strategy = strategy;
    }

    public void travel() {
        strategy.travel();
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

测试类:

public class InvokeClient {
    public static void main(String[] args) {
        Person person = new Person();
        person.setStrategy(new WalkTravel());
        person.travel();

        person.setStrategy(new BikeTravel());
        person.travel();

        person.setStrategy(new RailWayTravel());
        person.travel();
    }
}

 

使用策略模式,可以更好地根据不同的情况,做出更适合的应对策略。

 

优点:

封装算法,降低了算法的使用者和算法之间的耦合度,做好了良好的解耦。

体现了对扩展开放,对修改关闭的设计原则,使程序有更好的可维护性和扩展性。

面向抽象编程,而不是面向具体编程,使系统具有了灵活性。

 

缺点:

调用者需要知道每一种策略,才能正确地使用策略,要求调用者需要掌握每一种策略的使用场景。

对每一种变化都做了封装策略类,使系统中的类的数量增加,增加了系统的复杂度。

  

使用场景:

1.替代诸多if..else..条件判断。

2.算法需要自由切换。

3.多个类只在某些行为或算法上有所不同。

 

使用对象:

可以是一个对象使用多种策略,也可以是不同的对象使用不同的策略,依情形而定。

 

注意事项:

当策略过多时,会增加系统的复杂度,需要考虑策略膨胀的问题。

 

 

 

  • 大小: 57.6 KB
分享到:
评论

相关推荐

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

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

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

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

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

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

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

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

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

    GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象编程中最核心的设计原则之一。这些模式可以帮助开发者解决常见的编程问题,并提高代码的可复用性和可维护性。 #### 创建型模式 创建型模式关注的是对象...

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

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

    java设计模式---诙谐易懂版

    1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以互换。策略模式让算法的变化独立于使用算法的客户端。在提供...

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

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

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

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

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

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

    设计模式--策略模式StrategyPattern

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

    java设计模式--策略模式

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

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

    GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的核心内容之一。本文旨在深入解析这些设计模式,并通过C++实现来帮助读者更好地理解和应用这些模式。 #### 1. 创建型模式 创建型模式关注的是对象的...

    设计模式课件大全

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

    设计模式精解-GoF23种设计模式解析附C++实现源码

    - 策略模式(Strategy):定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换,算法的变化不会影响使用算法的客户。 - 模板方法模式(Template Method):在一个方法中定义一个算法的骨架,而将一些...

    设计模式-策略者

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

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

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

Global site tag (gtag.js) - Google Analytics