欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java设计模式(9):策略模式

程序员文章站 2024-02-09 11:44:40
...

定义

        策略模式定义了一个抽象类或接口,有多个具体的算法实现这些接口,在客户端使用的时候,只需要有这个接口的引用,在使用的时候,就可以通过这个接口来调用具体不同的实现方法。

构成

java设计模式(9):策略模式

        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();
	}

总结

        从上面可以看出,使用策略模式,在策略方法很多的时候,可以将不同的策略单独出来,互不影响。但与此同时,它的一个缺点就是会生成特别多的策略类。

相关标签: 策略模式