设计模式学习笔记(14)——策略模式

一、模式定义

      策略模式就是定义了算法族,分别封装起来,让他们之间可以互相转换,此模式让该算法的变化,不会影响到使用算法的用户。我们可以定义一些独立的类来封装不同的算法,每一个独立的类对应着一个具体的算法实现,在这里我们就将这里每一个独立的类称之为一个策略。

二、模式结构

三、模式实现

Strategy : 定义所有算法的公共接口(AlgorithmInterface)。Context 使用这个接口去调用 ConcreteStrategy 定义的具体算法。

abstract class Strategy {
    public abstract void AlgorithmInterface();
}

ConcreteStrategy : 实现 Strategy 中的算法接口(AlgorithmInterface)。

class ConcreteStrategyA extends Strategy {

    @Override

    public void AlgorithmInterface() {

        System.out.println("算法A");

    }

}



class ConcreteStrategyB extends Strategy {

    @Override

    public void AlgorithmInterface() {

        System.out.println("算法B");

    }

}



class ConcreteStrategyC extends Strategy {

    @Override

    public void AlgorithmInterface() {

        System.out.println("算法C");

    }

}

Context : 用一个 ConcreteStrategy 来配置。维护一个对 Strategy 对象的引用。

class Context {

    Strategy strategy;

    public Context(Strategy strategy) {

        this.strategy = strategy;

    }

    

    public void ContextInterface() {

        strategy.AlgorithmInterface();

    }

}

测试代码

public class StrategyPattern {
    public static void main(String[] args) {
        Context context1 = new Context(new ConcreteStrategyA());
        context1.ContextInterface();

        Context context2 = new Context(new ConcreteStrategyB());
        context2.ContextInterface();
        
        Context context3 = new Context(new ConcreteStrategyC());
        context3.ContextInterface();
    }
}

运行结果

算法A
算法B
算法C

四、使用场景

       1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。    
     2、一个系统需要动态地在几种算法中选择一种。    
     3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现

转载于:https://my.oschina.net/jewill/blog/417440

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值