JAVAJava 设计模式程序员

Java设计模式 - 策略模式

2017-12-25  本文已影响606人  a57ecf3aaaf2

定义

策略模式是设计模式之中相对比较简单的一种模式,其解决的就是大量使用 if...else...、switch...case... 这样的结构导致的代码臃肿的问题。

来看看策略模式的定义:

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户端而独立变化。

实现

首先定义一个基类,用于表示策略的接口:

public interface Operator {
    void operate();
}

下面是两个具体的实现类,也就是具体的策略:

public class Operator1 implements Operator {

    @Override
    public void operate() {
        System.out.println("operate 1...");
    }
}
public class Operator2 implements Operator {
    @Override
    public void operate() {
        System.out.println("operate 2...");
    }
}

策略模式一般与工厂方法模式结合使用,来达到最佳效果:

public final class OperatorFactory {

    public static Operator operator(int code) {
        switch (code) {
            case 0:
                return new Operator1();

            default:
                return new Operator2();
        }
    }
}

如果在客户端中使用 switch...case... 结构把所有的实现策略都写在同一个方法中,势必引起代码冗余:

public class Client {

    public static void main(String[] args) {
        switch (Integer.valueOf(args[0])) {
            case 0:
                // operate...
                break;

            case 1:
                // operate...
                break;

            case 2:
                // operate...
                break;

            default:
                // operate...
                break;
        }
    }
}

如果结合策略模式和工厂方法模式,使用下面的代码,就会使得代码更加清晰,符合单一职责原则,同时,客户端不用关心具体的策略的执行细节,只需关心自己需要传入的值即可。

public class Client {

    public static void main(String[] args) {
        OperatorFactory.operator(Integer.valueOf(args[0])).operate();
    }
}

总结

策略模式主要用来分离算法,根据相同的行为抽象来做不同的具体策略实现。通过以上也可以看出策略模式的优缺点:

优点:

缺点:

本文由 Fynn_ 原创,未经许可,不得转载!

上一篇 下一篇

猜你喜欢

热点阅读