java设计模式(9):策略模式
程序员文章站
2024-02-09 11:44:40
...
定义
策略模式定义了一个抽象类或接口,有多个具体的算法实现这些接口,在客户端使用的时候,只需要有这个接口的引用,在使用的时候,就可以通过这个接口来调用具体不同的实现方法。
构成
strategy:抽象的策略算法
concreteStrategy:具体实现的策略算法
context:上下文,包含一个strategy,这个策略可在运行时指定
应用场景
现在我们知道智能锁已经非常普及了,开门的方式有很多种,指纹开门,密码开门,卡片开门,人脸开门,二维码开门等。那这么多的开门方式,在执行的时候,到底选择哪一种,怎么来实现。最为常见的就是if-else,通过判断来选择。但是如果再新增一种开门方式,那对代码入侵比较大,我们这里选用策略模式,在新增一种开门方式时,只需要单独在新增一个策略实现类即可,对其他代码没有侵入。
代码示例
策略类
public interface Strategy {
public void openDoor();
}
具体策略类
public class FingureStrategy implements Strategy{
@Override
public void openDoor() {
System.out.println("指纹开门");
}
}
public class CardStrategy implements Strategy{
@Override
public void openDoor() {
System.out.println("卡片开门");
}
}
上下文类
public class Context {
private Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy;
}
public void openDoor(){
strategy.openDoor();
}
}
测试
public static void main(String[] args) {
Strategy cardStrategy = new CardStrategy();
Strategy fingureStrategy = new FingureStrategy();
Context contextA = new Context(cardStrategy);
contextA.openDoor();
Context contextB = new Context(fingureStrategy);
contextB.openDoor();
}
总结
从上面可以看出,使用策略模式,在策略方法很多的时候,可以将不同的策略单独出来,互不影响。但与此同时,它的一个缺点就是会生成特别多的策略类。
上一篇: 决策树、随机森林简单原理和实现