`

《设计模式》之十三:策略模式

阅读更多

Strategy Pattern 策略模式是一种比较简单的模式,其定义如下:

Define a family of algorithms, encapsulate each one, and make them interchangeable

定义一组算法,将每个算法封装起来,并且使它们可以互换

 

通用源码:

public interface Strategy {
    // 策略模式的运算法则
    public void doSomething();
}

 

public class ConcreteStrategy1 implements Strategy {
    @Override
    public void doSomething() {
        System.out.println("具体策略1的运算法则");
    }
}

 

public class ConcreteStrategy2 implements Strategy {
    @Override
    public void doSomething() {
        System.out.println("具体策略2的运算法则");
    }
}

 

public class Context {
    // 抽象策略
    private Strategy strategy = null;
    //构造函数设置具体的策略
    public Context(Strategy _strategy) {
        this.strategy = _strategy;
    }

    // 封装后的策略方法
    public void doAnything() {
        this.strategy.doSomething();
    }
}

 最后是演示类:

public class Client {
    public static void main(String[] args) {
        // 声明一个具体策略
        Strategy strategy = new ConcreteStrategy1();
        // 声明上下文
        Context context = new Context(strategy);
        // 执行封装后的方法
        context.doAnything();
    }
}

 

策略模式的优点:

1,算法可以自由切换

2,避免使用多重条件判断

3,扩展性良好

 

策略模式的缺点:

1,策略类数量增多

2,所有策略类都需要对外暴露,我们可以使用其他模式来修正这个缺陷,比如工厂方法、代理模式等

 

策略模式使用场景:

1,多个类只有在算法或行为上稍有不同的场景

2,算法需要自由切换的场景

3,需要屏蔽算法规则的场景

 

策略模式注意事项:

如果系统中一个策略家族具体数量超过4个,则需要考虑使用混合模式。

 

策略模式的扩展:策略枚举

一个简单的输入两个数和一个+或者-的运算符号,计算结果。

public enum Calculator {
    // 加法运算
    ADD("+") {
        @Override
        public int exec(int a, int b) {
            return a + b;
        }
    },
    //减法运算
    SUB("-") {
        @Override
        public int exec(int a, int b) {
            return a - b;
        }
    };
    String value = "";
    private Calculator(String _value) {
        this.value = _value;
    }
    public String getValue() {
        return this.value;
    }
    public abstract int exec(int a, int b);
}

 

public class ClientEnum {
    public static void main(String[] args) {
        // 输入两个参数是数字
        int a = Integer.parseInt(args[0]);
        String symbol = args[1];
        int b = Integer.parseInt(args[2]);
        System.out.println("输入参数为:" + Arrays.toString(args));
        System.out.println("运行结果为:" + Calculator.valueOf(symbol).exec(a, b));
    }
}

 

实际项目中,我们一般通过工厂方法来实现策略类的声明。

 

本人博客已搬家,新地址为:http://yidao620c.github.io/

分享到:
评论

相关推荐

    设计模式解读之一: 策略模式——鸭子游戏.doc

    设计模式解读之一:策略模式——鸭子游戏 策略模式是指定义amily of algorithms,encapsulate each one,and make them interchangeable,这种模式让我们可以在不修改原始代码的情况下,灵活地更换算法。下面我们来...

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

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

    23种设计模式详解PDF

    总体来说设计模式分为三大类: 创建型模式(5): 工厂方法模式 、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式(7): 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式...

    Java 经典设计模式讲解以及项目实战

    Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...

    Head First 设计模式 JAVA源码

    所有的设计模式Java实现。 第一讲:简单工厂模式 第二讲:工厂方法模式 第三讲:抽象工厂模式 第四讲:工厂模式在开发中的运用 第五讲:单例模式 第六讲:原型模式 ...第三十讲:设计模式总结

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

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

    设计模式-策略者

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

    设计模式之蝉

    设计模式通常被划分为三个主要类别:创建型模式、结构型模式和行为型模式。 《设计模式之蝉》这本书可能是对设计模式的一种形象化描述,或是以蝉为比喻来讲解设计模式的概念。蝉在地下蛰伏多年,最终破土而出,仅...

    Java设计模式之禅

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

    JAVA设计模式(十三种)

    在Java中,总共包括十三种设计模式,这些模式可以被划分为三大类:创建模式、结构模式和行为模式。 1. 创建模式: - 工厂模式(Factory):工厂模式是一种最基础的创建型模式,它提供了一种创建对象的最佳方式,...

    设计模式之策略模式

    博客文章《设计模式之策略模式》中可能提供了策略模式的实例代码,通过一个实际的问题(例如排序数组)来展示如何应用策略模式。在代码中,可能会有如下结构: - 定义一个`SortStrategy`接口,包含`sort()`方法。 -...

    设计模式之策略模式源码

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

    设计模式之策略模式(附demo)

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

    java常用23中设计模式

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    设计模式之美——教你写出高质量代码

    "设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...

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

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

Global site tag (gtag.js) - Google Analytics