20191219 策略模式

策略模式:指的是对象具备某个行为,但是在不同的场景中,该行为有不同的实现算法。

策略模式使用的就是面向对象的继承和多态机制,从而实现同一行为在不同场景下具备不同实现。

策略模式本质:分离算法,选择实现。

主要解决

在有多种算法相似的情况下,使用 if...else 或 switch...case 所带来的复杂性和臃肿性。

优点

1)算法多样性,且具备自由切换功能;

2)有效避免多重条件判断,增强了封装性,简化了操作,降低出错概率;

3)扩展性良好,策略类遵顼 里氏替换原则,可以很方便地进行策略扩展;

使用场景

1、针对同一类型问题,有多种处理方式,每一种都能独立解决问题;

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

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

策略模式的通用 UML 类图(如何画类图?类名,方法名,接口,类与类之间的关系)

从 UML 类图中,我们可以看到,策略模式 主要包含三种角色:

1)上下文角色(Context):用来操作策略的上下文环境,屏蔽高层模块(客户端)对策略,算法的直接访问,封装可能存在的变化;

2)抽象策略角色(Strategy):规定策略或算法的行为; 接口

3)具体策略角色(ConcreteStrategy):具体的策略或算法实现; 实现类

抽象策略类,具体策略实现。

    public static void main(String[] args) {
        //选择一个具体策略
        IStrategy strategy = new ConcreteStrategyA();
        //来一个上下文环境
        Context context = new Context(strategy);
        //客户端直接让上下文环境执行算法
        context.algorithm();
    }
class Context {
        private IStrategy mStrategy;

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

        public void algorithm() {
            this.mStrategy.algorithm();
        }
    }

策略模式中的上下文环境(Context),其职责本来是隔离客户端与策略类的耦合,让客户端完全与上下文环境沟通,无需关系具体策略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值