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

北京东方华美建设集团有限公司网站最新的新闻

北京东方华美建设集团有限公司网站,最新的新闻,外贸云,无极电影网甄嬛传一、定义 策略模式#xff0c;针对每一个不同的类型#xff0c;调用具有共同接口的不同实现类#xff0c;从而使得它们可以相互替换。 策略模式 #xff0c;针对实现同一接口的不同的类#xff0c;采用不同的策略。比如#xff0c;面对高级会员、初级会员会采用不同的折…一、定义 策略模式针对每一个不同的类型调用具有共同接口的不同实现类从而使得它们可以相互替换。 策略模式 针对实现同一接口的不同的类采用不同的策略。比如面对高级会员、初级会员会采用不同的折扣。 策略模式可以避免大量的if和else。 二、角色 策略模式涉及到三个角色 ●  环境(Context)角色调用策略 ●  抽象策略(Strategy)角色抽象角色通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。 ●  具体策略(ConcreteStrategy)角色实现抽象策略接口包装了相关的算法或行为。 三、代码示例 type 枚举 public enum TypeEnum {/*** 类型一*/FIRST_TYPE(1, 类型一),/*** 类型二*/SECOND_TYPE(2, 类型二),/*** 类型三*/THIRD_TYPE(3, 类型三),;/*** 类型*/private final Integer type;private final String typeName;TypeEnum(Integer type, String text) {this.type type;this.typeName text;}public Integer getType() {return type;}public String getTypeName() {return typeName;}/*** 根据 type 获取枚举** param type* return*/public static TypeEnum getByType(Integer type) {for (TypeEnum typeEnum : TypeEnum.values()) {if (typeEnum.getType().equals(type)) {return typeEnum;}}return null;}public static TypeEnum getByName(String name) {for (TypeEnum typeEnum : TypeEnum.values()) {if (typeEnum.getTypeName().equals(name)) {return typeEnum;}}return null;}} 基础类 /*** 基础类写不同策略的公共的代码避免代码重复*/ Service public class TypeStrategyBaseService {/*** 公共代码避免重复*/public void doCommon() {System.out.println(execute common method.);} } 策略模式接口 /*** 策略模式接口**/ public interface TypeStrategy {/*** 做某事* param param* return*/String doSth(String param) ;/*** 获取类型* return*/Integer getType(); }第一种策略 /*** 第一种策略*/ Service public class FirstTypeStrategyServerImpl extends TypeStrategyBaseService implements TypeStrategy {/*** 业务逻辑*/Overridepublic String doSth(String param) {doCommon();return FirstStrategy doSth param;}Overridepublic Integer getType() {return TypeEnum.FIRST_TYPE.getType();}}第二种策略 /*** 第二种策略*/ Service public class SecondTypeStrategyServiceImpl extends TypeStrategyBaseService implements TypeStrategy {/*** 业务逻辑*/Overridepublic String doSth(String param) {doCommon();return SecondStrategy doSth param;}Overridepublic Integer getType() {return TypeEnum.SECOND_TYPE.getType();}}配置 策略对应的 map Component public class SpringApplicationContextHolder implements ApplicationContextAware {private static ApplicationContext applicationContext;Overridepublic void setApplicationContext(ApplicationContext ctx) throws BeansException {applicationContext ctx;}/*** 获取类型为 key策略作为value 的 map**/public static T MapString, T getBeansOfType(ClassT classType) {if (applicationContext null) {log.warn(ApplicationContext is null.classType:{}, JSON.toJSONString(classType));throw new IllegalStateException(getBeansOfType failed.ApplicationContext is null);}return applicationContext.getBeansOfType(classType);}}策略 Context /*** 策略 Context获取策略*/ Component public class TypeStrategyContext {/*** 存在多个容器的时候会被加载多次*/private static volatile MapInteger, TypeStrategy strategyMap;PostConstructpublic static void init() {if (strategyMap null) {MapString, TypeStrategy subBeanMap SpringApplicationContextHolder.getBeansOfType(TypeStrategy.class);strategyMap subBeanMap.values().stream().collect(Collectors.toMap(TypeStrategy::getType, typeStrategy - typeStrategy));}}/*** 根据 type 获取不同的策略再执行业务逻辑。*/public static TypeStrategy getStrategyByType(int type) {return strategyMap.get(type);}}调用策略的类 /*** 调用类**/ Service public class TypeStrategyClientService {/*** 根据 type 获取不同的策略再执行业务逻辑。*/public String doSthByType(Integer type, String param) {TypeStrategy typeStrategy TypeStrategyContext.getStrategyByType(type);if (typeStrategy null) {throw new IllegalStateException(类型 type 不存在策略);}return typeStrategy.doSth(param);}}测试 Test public void testDoSthByType2() {String result typeStrategyClientService.doSthByType(1, 12345);System.out.println( typeStrategyClientService result: result); }输出结果 type 为1时结果为 execute common method.result: FirstStrategy doSth 12345type为2时结果为 execute common method.result: SecondStrategy doSth 12345
http://www.zqtcl.cn/news/898515/

相关文章:

  • wordpress 移动 建站网站前台如何做访问量显示
  • 公司做网站买域名之后做什么打鱼网站开发
  • 南京市城乡建设局网站二级建造师证件查询
  • 百度关键词优化系统网站优化师招聘
  • 网站方案建设书推广产品的软文怎么写
  • 网站栏目按扭邢台手机网站建设地方
  • 青浦赵巷网站建设做网站需要编程吗
  • 公司logo设计含义株洲seo
  • 公司制作网站做论坛网站怎么赚钱吗
  • 深圳 外贸 网站建设 龙医院网站建设价格
  • 网上建网站驰易网站建设
  • 建设工程招标专业网站网站联盟广告
  • 自建站英文公司网站制作银川
  • 顺德网站建设公司信息全网推广软件
  • 网站全屏视频怎么做电子商务网站规划的原则是什么
  • 网站建设行业发展史做网站主页上主要放哪些内容
  • 成都成华网站建设小程序开发网上商城
  • 企业网站建设的重要性和必要性深圳设计网站排行
  • 山西省网站建设河南省考生服务平台官网
  • 做水产的都用什么网站wordpress 前端登陆
  • 商务网站建设网站开发一个软件开发的流程
  • 网站建设电脑和手机有区别吗公众号登录微信入口
  • 天津市建设监理协会网站三亚网络网站建设
  • 义乌进货网平台北京网优化seo优化公司
  • 在网站上放广告网站建设流程效果
  • 腾讯云学生机做网站济南网站改版
  • 开封市做网站的公司wordpress无法映射
  • 网站构建工具wordpress 主题授权
  • 大型网站开发 赚钱宁夏网站建设优化
  • 通过ip访问网站需要怎么做博客的网站页面设计