设计模式-策略模式

###模式定义

定义一些列的算法,吧他们一个个封装起来,并且使他们克相互替换。本模式使得算法可独立于使用它的客户而变化。

###模式结构 模式结构 ###代码实现

interface Strategy {
    public void doSomething();
}
class ConcreteStrategy1 implements Strategy {
    public void doSomething() {
        System.out.println("具体策略1");
    }
}
class ConcreteStrategy2 implements Strategy {
    public void doSomething() {
        System.out.println("具体策略2");
    }
}
class Context {
    private Strategy strategy;

    public Context(Strategy strategy){
        this.strategy = strategy;
    }

    public void execute(){
        strategy.doSomething();
    }
}
public class Client {
        public static void main(String[] args){
            Context context;
            System.out.println("-----执行策略1-----");
            context = new Context(new ConcreteStrategy1());
            context.execute();

            System.out.println("-----执行策略2-----");
            context = new Context(new ConcreteStrategy2());
            context.execute();
        }
    }

###模式的优缺点 ####优点

  1. 策略模式提供了对“开闭原则”的完美支持,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。

  2. 策略模式提供了管理相关的算法族的办法。

  3. 策略模式提供了可以替换继承关系的办法。

  4. 使用策略模式可以避免使用多重条件转移语句。

####缺点

  1. 必须对客户端(调用者)暴露所有的策略类,因为使用哪种策略是由客户端来决定的。

  2. 维护各个策略类会给开发带来额外开销,策略模式将造成产生很多策略类。

###思考

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

###开发中的应用场景

  1. 几个类的主要逻辑相同,只在部分逻辑的算法和行为上稍有区别的情况。

  2. 有几种相似的行为,或者说算法,客户端需要动态地决定使用哪一种,那么可以使用策略模式,将这些算法封装起来供客户端调用。

转载于:https://my.oschina.net/u/2361475/blog/734746

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值