wordpress 站点打开慢,百度seo算法,二室一厅60平米装修案例,网站中的宣传册翻页动画怎么做一、背景
策略模式#xff08;Strategy Pattern#xff09;是一种行为设计模式#xff0c;它定义了一系列的算法#xff0c;并将每一个算法封装起来#xff0c;使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。
二、结构
策略模式主要包含三个角色Strategy Pattern是一种行为设计模式它定义了一系列的算法并将每一个算法封装起来使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。
二、结构
策略模式主要包含三个角色
Strategy策略接口定义了所有支持的所有算法的公共接口。ConcreteStrategy具体策略实现了 Strategy 接口提供了具体的算法实现。Context上下文维护了一个对 Strategy 对象的引用通常在构造函数中传入具体的策略对象并通过一个方法让策略接口的实现生效。
三、示例代码
假设我们需要获取每个班级的学生人数只是简单的一个示例
3.1 创建班级的枚举类
/*** 班级信息枚举*/
AllArgsConstructor
Getter
public enum ClassEnum {CLASS_1A(1A, 一年级一班, 25),CLASS_1B(1B, 一年级二班, 32);// 班级代码private final String classCode;// 班级名称private final String className;// 班级人数private final int numberOfStudents;public static ClassEnum getByClassCode(String classCode) {return Arrays.stream(ClassEnum.values()).filter(classInfo - classInfo.getClassCode().equals(classCode)).findFirst().orElse(null);}
}3.2 抽象类
/*** 抽象处理类*/
public abstract class AbstractClassHandle {public abstract String getCode();public abstract int getCount();}3.3 简单工厂
/*** 简单工厂类**/
Component
public class ClassExecuteServiceFactory implements ApplicationContextAware {private final static MapString, AbstractClassHandle CLASS_CODE_ABSTRACT_CLASS_HANDLE_MAP new HashMap();Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {MapString, AbstractClassHandle types applicationContext.getBeansOfType(AbstractClassHandle.class);types.values().forEach(e - CLASS_CODE_ABSTRACT_CLASS_HANDLE_MAP.putIfAbsent(e.getCode(), e));}public static AbstractClassHandle getHandler(String code) {return CLASS_CODE_ABSTRACT_CLASS_HANDLE_MAP.get(code);}
}3.4 两个不同的处理类
ClassOneExecuteServiceHandle 班级一
/*** 1班handle类**/
Component
public class ClassOneExecuteServiceHandle extends AbstractClassHandle {Overridepublic String getCode() {return ClassEnum.CLASS_1A.getClassCode();}Overridepublic int getCount() {return ClassEnum.CLASS_1A.getNumberOfStudents();}
}ClassTwoExecuteServiceHandle 班级二
/*** 2班handle类**/
Component
public class ClassTwoExecuteServiceHandle extends AbstractClassHandle {Overridepublic String getCode() {return ClassEnum.CLASS_1B.getClassCode();}Overridepublic int getCount() {return ClassEnum.CLASS_1B.getNumberOfStudents();}
}3.5 测试请求类
/*** author Jerryean* description 测试策略方式*/
Api(tags 测试策略方式)
RestController
RequestMapping(/strategy)
public class AbstractTestController {GetMapping(/abstractTest)ApiOperation(策略模式-简单测试)public BaseResponseInteger abstractTest(RequestParam(value classCode) String classCode) {int count ClassExecuteServiceFactory.getHandler(classCode).getCount();return BaseResponse.data(count);}
}四、总结
策略模式非常适合那些需要在运行时动态改变行为的场景。 策略模式是一种非常实用的设计模式可以帮助开发人员编写更加灵活和可维护的代码。