战略形式概念

战略形式(Strategy Pattern)是一种行为型设计形式,它允许在运转时动态改变目标的行为。战略形式优先考虑将算法、事务规矩等笼统成不同的类,然后能够经过组合完成各种功用和运用场景。

战略形式人物

战略形式通常包含以下几个人物:

战略接口(Strategy Interface):界说了所有详细战略类都需求完成的办法或许属性等,包含上下文能够调用的所有操作。

详细战略类(Concrete Strategy Class):完成了战略接口中界说的所有办法,而且封装了一个特定的算法、事务规矩等。

上下文类(Context Class):包含着与详细战略类相关联的数据,并操控着详细战略类的初始化、调用、切换等操作。

在运用战略形式时,咱们通常将详细战略类界说为独立的类或许匿名内部类,以便于后期对其进行扩展和保护。同时,咱们还能够提供一些工厂形式和单例形式等去创建和管理详细战略类,并运用IOC容器来统一管理上下文类和详细战略类的生命周期等。

战略形式优缺陷

战略形式的长处包含:

  1. 能够动态切换详细战略类,不需求修正上下文类的代码,提高了代码的灵活性和可保护性。

  2. 能够防止运用杂乱的条件句子或许多层嵌套等,提高了代码的可读性和易用性。

  3. 能够使算法、事务规矩等更加独立和可测试,然后降低了耦合性和杂乱度。

战略形式的缺陷包含:

  1. 需求界说和管理大量的详细战略类,增加了代码量和保护难度。

  2. 如果战略接口较为杂乱或许需求频繁调整,可能会导致系统性能下降。

战略形式代码事例

咱们运用一个简单的例子来介绍下战略形式:

首先,咱们需求界说一个战略接口(Strategy Interface),其中包含了所有详细战略类都需求完成的办法:

public interface Strategy {
    int calculate(int a, int b);
}

然后,咱们能够界说几个详细战略类(Concrete Strategy Class),它们别离对应不同的算法、事务规矩等:

public class AddStrategy implements Strategy {
    @Override
    public int calculate(int a, int b) {
        return a + b;
    }
}
public class SubtractStrategy implements Strategy {
    @Override
    public int calculate(int a, int b) {
        return a - b;
    }
}
public class MultiplyStrategy implements Strategy {
    @Override
    public int calculate(int a, int b) {
        return a * b;
    }
}

接下来,咱们需求界说一个上下文类(Context Class),它经过组合详细战略类完成不同的功用:

public class Context {
    private Strategy strategy;
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }
    public int executeStrategy(int a, int b) {
        return strategy.calculate(a, b);
    }
}

最后,咱们能够经过如下方法运用战略形式:

public class Main {
    public static void main(String[] args) {
        int a = 10;
        int b = 5;
        Context context = new Context();
        Strategy addStrategy = new AddStrategy();
        context.setStrategy(addStrategy);
        int result1 = context.executeStrategy(a, b);
        System.out.println(a + " + " + b + " = " + result1);
        Strategy subtractStrategy = new SubtractStrategy();
        context.setStrategy(subtractStrategy);
        int result2 = context.executeStrategy(a, b);
        System.out.println(a + " - " + b + " = " + result2);
        Strategy multiplyStrategy = new MultiplyStrategy();
        context.setStrategy(multiplyStrategy);
        int result3 = context.executeStrategy(a, b);
        System.out.println(a + " * " + b + " = " + result3);
    }
}

运转咱们的代码,输出成果如下:

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50

在上面的例子中,咱们经过战略形式完成了对不同算法的封装和组合,然后完成了更灵活、易保护的代码设计。

战略形式小结

总之,战略形式通常适用于将类似但不同的算法、事务规矩等进行封装和组合的运用场景,它经过别离算法、封装改变、笼统依赖等方法,完成了代码的扩展性和重用性。

好了,本篇文章就先共享到这儿了,后续将会持续介绍23种设计形式之其他形式,感谢大佬仔细读完支撑咯~