Java设计模式——策略模式

作者: Mr_欢先生 | 来源:发表于2017-09-22 22:16 被阅读62次

1.策略模式(Strategy Pattern)

分别封装行为接口,实现算法族,超类里放行为接口对象,在子类里具体设定行为对象。原则就是:分离变化部分,封装接口,基于接口编程各种功能。此模式让行为算法的变化独立于算法的使用者。

2.实现方式

各个类的作用
AlgorithmStrategy:创建一个定义活动的 AlgorithmStrategy接口
* OperationImpl:实现了 AlgorithmStrategy接口的实体策略类
Context:使用该策略的类
AlgorithmStrategyPattern:验证策略改变时的行为

3.实例

创建一个接口

  • AlgorithmStrategy .java
package com.huan.eu;

public interface AlgorithmStrategy {
    int operation(int firstNumber,int SecondNumber);
}

创建策略一

  • AddOperationImpl .java
package com.huan.eu.impl;
import com.huan.eu.AlgorithmStrategy;

public class AddOperationImpl implements AlgorithmStrategy {
    public int operation(int firstNumber, int SecondNumber) {
        return firstNumber + SecondNumber;
    }
}

创建策略二

  • ReduceOperationImpl .java
package com.huan.eu.impl;
import com.huan.eu.AlgorithmStrategy;

public class ReduceOperationImpl implements AlgorithmStrategy {
    public int operation(int firstNumber, int SecondNumber) {
        return firstNumber - SecondNumber;
    }
}

创建策略三

  • RideOperationImpl .java
package com.huan.eu.impl;
import com.huan.eu.AlgorithmStrategy;

public class RideOperationImpl  implements AlgorithmStrategy{
    public int operation(int firstNumber, int SecondNumber) {
        return firstNumber * SecondNumber;
    }
}

使用策略的类

  • Context .java
package com.huan.eu;

public class Context {
    private AlgorithmStrategy algorithmStrategy;

    public Context(AlgorithmStrategy algorithmStrategy){
        this.algorithmStrategy = algorithmStrategy;
    }

    public int executeAlgorithmStrategy(int firstNumber, int secondNumber){
        return algorithmStrategy.operation(firstNumber,secondNumber);
    }
}

使用不同策略时时的行为变化

  • AlgorithmStrategyPattern.java
package com.huan.eu;

import com.huan.eu.impl.AddOperationImpl;
import com.huan.eu.impl.ReduceOperationImpl;
import com.huan.eu.impl.RideOperationImpl;
import org.junit.Test;

public class AlgorithmStrategyPattern {
    @Test
    public void test() {
        Context context;

        context = new Context(new AddOperationImpl());
        System.out.println("10 + 50 =" + context.executeAlgorithmStrategy(10, 50));
        context = new Context(new ReduceOperationImpl());
        System.out.println("50 - 10 =" + context.executeAlgorithmStrategy(50, 10));
        context = new Context(new RideOperationImpl());
        System.out.println("10 * 50 =" + context.executeAlgorithmStrategy(10, 50));
    }
}

4.总结

  • 优点:
    1、算法可以自由切换。
    2、避免使用多重条件判断。
    3、扩展性良好。
  • 缺点:
    1、策略类会增多。
    2、所有策略类都需要对外暴露。
  • 使用场景:
    1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
    2、一个系统需要动态地在几种算法中选择一种。
    3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

相关文章

  • java建造者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java单例模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java外观模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java适配器模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java观察者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java代理模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java策略模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • Java 常用设计模式简例

    简述Java常用设计模式 简述Java常用设计模式及设计原则 strate---------策略模式针对接口编程,...

  • 策略模式

    参考资料:漫话:如何给女朋友解释什么是策略模式? 设计模式之策略模式(实例+Demo) Java设计模式(8)——...

  • 学习Head First设计模式Day1

    Java设计模式之设计模式 策略模式:策略模式定义了算法簇,分别封装起来,让他们之间可以互相替换,此设计模式让算法...

网友评论

    本文标题:Java设计模式——策略模式

    本文链接:https://www.haomeiwen.com/subject/jdfqextx.html