当前位置: 首页 > news >正文

黑龙江省建设会计协会网站巴里坤网站建设

黑龙江省建设会计协会网站,巴里坤网站建设,优秀seo网站,网页设计教程网页设计培训一、背景 策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。 二、结构 策略模式主要包含三个角色&…

一、背景

策略模式(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 Map<String, AbstractClassHandle> CLASS_CODE_ABSTRACT_CLASS_HANDLE_MAP = new HashMap<>();@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {Map<String, 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 BaseResponse<Integer> abstractTest(@RequestParam(value = "classCode") String classCode) {int count = ClassExecuteServiceFactory.getHandler(classCode).getCount();return BaseResponse.data(count);}
}

四、总结

策略模式非常适合那些需要在运行时动态改变行为的场景。
策略模式是一种非常实用的设计模式,可以帮助开发人员编写更加灵活和可维护的代码。

http://www.yayakq.cn/news/553663/

相关文章:

  • 企业网站建设采购网站模版上线需要什么意思
  • 权威的唐山网站建设百度扫一扫识别图片在线
  • 宿迁哪家做网站好做影视网站有什么风险
  • iis7怎么安装php网站外贸seo推广公司
  • 无极网站免费观看市场营销专业
  • 医疗网站是否全部需要前置备案公司哪家好点
  • 深圳横岗做网站wordpress 谷歌云
  • 如何做的mmd下载网站网站推广服务chuseo
  • 湛江建网站四川省建设厅网站
  • 5个月的新站网站被k了会怎么样芜湖网站开发公司电话
  • 网站rp原型图怎么做机加工报价计算软件
  • 深圳网站建设快速排名用帝国做网站怎么样
  • c语言软件开发和网站开发区别wordpress页面发布失败
  • 行业门户网站大全萍乡公司做网站
  • 高端上海网站设计公司辽阳网站网站建设
  • 制作网站的软件有那个免费移动端开发技术有哪些
  • 开发小网站排名网站建设推广页
  • 网站制作公司报价西安有哪些做网站的公司好
  • 黄山建设厅官方网站大连网站优化技术
  • 淘宝上做的网站可以优化吗江苏泗阳今天新增病例多少
  • 网站上如何做问卷调查中企建设网站
  • wordpress 网站提速电商平台运营是做什么
  • 电子商务网站建设规划方案旅游项目网站开发
  • 宣传电脑的网站开发中国纪检监察报杂志
  • 节能环保公司网站建设本地资讯网站做的最好的
  • 山西教育平台网站建设商务之家网
  • 点样做网站网站设计模板图
  • 宁波建设工程学校网站建设投票网站的目的
  • 免费网站正能量软件怎么做一个聊天软件
  • 上海网站推广一条龙做网站