策略模式(Strategy Pattern)

一. 模式定义

  • 策略模式指的是对象具备某个行为,但是在不同的场景中,该行为有不同的实现算法。
  • 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
  • 主要目的就是解耦合,分离算法,选择实现

二.模式结构

环境(Context):有一个Strategy类的引用,和具体的策略类交互。
抽象策略(Strategy)角色:一个接口或抽象类,给出规范。
具体策略(ConcreteStrategy)角色:具体算法或行为。

  •  环境(Context)
 //上下文环境
    static class Context {
        private IStrategy mStrategy;

        public Context(IStrategy strategy) {
            this.mStrategy = strategy;
        }

        public void algorithm() {
            this.mStrategy.algorithm();
        }
    }
  • 抽象策略
//抽象策略类 Strategy
    interface IStrategy {
        void algorithm();
    }
  •  具体策略
//具体策略类 ConcreteStrategyA
    static class ConcreteStrategyA implements IStrategy {

        @Override
        public void algorithm() {
            System.out.println("Strategy A");
        }
    }

//具体策略类 ConcreteStrategyB
    static class ConcreteStrategyB implements IStrategy {

        @Override
        public void algorithm() {
            System.out.println("Strategy B");
        }
  • 用户类
class Client {
    public static void main(String[] args) {
        //选择一个具体策略
        IStrategy strategy = new ConcreteStrategyA();
        //来一个上下文环境
        Context context = new Context(strategy);
        //客户端直接让上下文环境执行算法
        context.algorithm();
    }

三.使用场景

  • 一个系统中有许多类,他们之间的区别仅仅是他们的行为,,使用策略模式可以动态的让一个对象在许多行为中选择一种行为。
  • 不希望客户端知道复杂的,与算法相关的数据结构,封装算法,提高保密性与安全性。

策略模式中,应当由客户端自己决定在什么情况下使用哪一个具体策略角色。

策略模式并不决定在何时何地使用何种算法,算法的选择由客户端来决定。

策略模式与状态模式区别

  • 状态模式将各个状态所对应的操作分离开来,即对于不同的状态,由不同的子类实现具体操作,不同状态的切换由子类实现,当发现传入参数不是自己这个状态所对应的参数,则自己给Context类切换状态

  • 而策略模式是直接依赖注入到Context类的参数进行选择策略,不存在切换状态的操作。

关于状态模式可看:

http://t.csdn.cn/WsFChicon-default.png?t=N3I4http://t.csdn.cn/WsFCh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值