策略模式

2018-11-21  本文已影响0人  南谭一隅

一、定义

定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 --- 《设计模式》

二、适用性

1、一些类只是行为不同,其他的是相同的。
2、需要使用一个算法的不同变体。
3、算法使用到了客户不应该知道的数据。
4、一个类中定义了多种行为,且这些行为在这个类的操作中以多个条件语句的形式出现。

三、代码实现

1、定义一个策略接口

package com.hqzmss.strategy;

public interface Strategy {
    void print();
}

2、定义两个具体策略

package com.hqzmss.strategy;

public class ConcreteStrategyOne implements Strategy {
    public void print() {
        System.out.println("打印一行");
    }
}
package com.hqzmss.strategy;

public class ConcreteStrategyTwo implements Strategy{
    public void print() {
        System.out.println("打印两行");
    }
}

3、定义上下文

package com.hqzmss.strategy;

public class Context {
    private Strategy strategy;

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

    public void print() {
        this.strategy.print();
    }
}

4、测试类

package com.hqzmss.strategy;

public class TestClass {
    public static void main(String[] args) {
        //  这里的构造方法中传入一个具体策略
        Context context = new Context(new ConcreteStrategyTwo());
        context.print();
    }
}

四、优点

1、可以析取出算法中的公共功能
2、替代继承方法
3、消除条件语句
4、实现同一行为不同的算法选择

五、缺点

1、客户必须了解具体的策略实现,才好选择
2、Strategy跟Context之间的通信开销
3、增加了对象的数目

六、专业术语

1、Strategy:策略
2、ConcreteStrategy:具体策略
3、Context:上下文

上一篇下一篇

猜你喜欢

热点阅读