攻略大全
1. 粘贴攻略
2. 造火箭攻略
3. 拧螺丝攻略
/**
* @author Huadao
* @date Created in 2022/11/16
* @desc 抽象策略角色:接口或抽象类,给出所有具体策略类所需实现的抽象逻辑
*/
public interface IStrategy {
void doSomething();
}
/**
* @author Huadao
* @date Created in 2022/11/16
* @desc 具体策略角色:实现具体的策略逻辑
*/
public class CatStrategyImpl implements IStrategy{
@Override
public void doSomething() {
// 该策略下的具体逻辑
System.out.println("sleep");
}
}
/**
* @author Huadao
* @date Created in 2022/11/16
* @desc 具体策略
*/
public class DogStrategyImpl implements IStrategy{
@Override
public void doSomething() {
// 该策略下的具体逻辑
System.out.println("play");
}
}
/**
* @author Huadao
* @date Created in 2022/11/16
* @desc 策略环境:持有抽象策略角色的引用
*
* 策略模式
* 优点:
* 策略类之间可以自由切换,由于策略类都实现同一个接口,所以使它们之间可以自由切换
* 易于扩展,增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合“开闭原则“
* 避免使用多重条件选择语句(if else),充分体现面向对象设计思想
* 缺点:
* 客户端必须知道所有的策略类,并自行决定使用哪一个策略类
* 策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量
* 应用场景:
* 动态选择多种复杂行为时
*
*/
public class StrategyContext {
private IStrategy iStrategy;
/**
* 根据客户端传入的不同条件选择不同的策略逻辑
* @param animal
*/
public void doSomething(String animal) {
switch (animal) {
case "cat":
iStrategy = new CatStrategyImpl();
break;
case "dog":
iStrategy = new DogStrategyImpl();
break;
default:
iStrategy = null;
break;
}
if (iStrategy != null) {
iStrategy.doSomething();
}
}
}
3.1 优点
-
策略类之间可以自由切换
由于策略类都实现同一个接口,所以使它们之间可以自由切换。 -
易于扩展
增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合“开闭原则“ -
避免使用多重条件选择语句(if else),充分体现面向对象设计思想。
3.2 缺点
- 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
- 策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。
3.3 应用场景
动态选择多种复杂行为
该行为可理解为:
- 复杂的算法 / 数据结构
- 类的行为 / 方法
注:提高了行为的保密 & 阿暖