行为型模式——策略模式
策略模式概述
策略模式定义了一系列算法,并将每个算法封装起来,是它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式食欲对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
策略模式结构
在策略模式中有以下角色:
- 抽象策略类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
- 具体策略类:实现了抽象策略定义的接口,提供具体的算法实现或行为。
- 环境类:持有一个策略类的引用,最终给客户端使用。
策略模式实现
(策略模式其实很想结构型模式中的桥接模式),其在环境类中聚合抽象策略类。
/**
* Strategy类是抽象策略类
*/
public interface Strategy {
void show();
}
/**
* StrategyA、StrategyB、StrategyC类是具体策略类
*/
public class StrategyA implements Strategy{
@Override
public void show() {
System.out.println("买一送一");
}
}
public class StrategyB implements Strategy{
@Override
public void show() {
System.out.println("满200减50");
}
}
public class StrategyC implements Strategy{
@Override
public void show() {
System.out.println("有赠品");
}
}
/**
* SalesMan类是环境类
*/
public class SalesMan {
private Strategy strategy;
public SalesMan(Strategy strategy) {
this.strategy = strategy;
}
public void salesManShow(){
strategy.show();
}
}
策略模式优缺点
优点:
- 策略类之间可以自由切换,由于策略类都实现同一个接口,所以他们之间可以自由切换
- 易于扩展:增加一个新的策略只需要添加一个具体的策略类即可,基本不需要修改原有代码
缺点:
- 客户端必须知道所有的策略类,并自行决定哪一个策略类。
- 策略模式将造成产生很多的策略类,可以通过使用享元模式在一定程度上减少类对象的数量
文章内容为个人学习总结,如有错误望指正。
参考链接https://www.bilibili.com/video/BV1Np4y1z7BU