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

服务器建网站教程域名是企业的网上商标

服务器建网站教程,域名是企业的网上商标,装修公司加盟模式,深圳罗湖区网站开发公司策略模式是什么 策略模式(Strategy):针对一组算法,将每一个算法封装起来,从而使得它们可以相互替换。 比如我们一个软件的会员等级,每一个等级都会有对应的一些等级权益,那么每一个等级权益就…

策略模式是什么

策略模式(Strategy):针对一组算法,将每一个算法封装起来,从而使得它们可以相互替换。

比如我们一个软件的会员等级,每一个等级都会有对应的一些等级权益,那么每一个等级权益就对应一个策略

结构

策略模式的通用类图如下:
在这里插入图片描述
策略模式主要由这三个角色组成,环境角色(Context)、抽象策略角色(Strategy)和具体策略角色(ConcreteStrategy)

1.上下文角色(Context):持有所有策略类的对象,可以根据策略提供相应的算法给客户端使用。
2.抽象策略角色(Strategy):这是一个抽象角色,通常由一个接口或抽象类实现。此角色提供具体策略类所需的接口。
3.具体策略角色(ConcreteStrategy):继承或实现了抽象策略,封装了相应的算法或行为。

策略模式的优缺点

优点
(1)算法可以自由切换
(2)避免使用多重条件判断
(3)扩展性良好,增加一个策略只需实现接口即可

缺点
(1)策略类数量会增多,每个策略都是一个类,复用性很小
(2)所有的策略类都需要对外暴露

使用场景

1、业务代码需要根据场景不同,切换不同的实现逻辑
2、代码中存在大量 if else 逻辑判断

实例

下面使用策略模式实现会员不同等级的权益领取

抽象策略角色:

/*** 会员抽象策略*/
public interface MemberStrategy {/*** 领取会员福利*/void getWeal();}

具体策略角色:

/*** 等级1的会员福利*/
@Component
public class LV1MemberWeal implements MemberStrategy {@Overridepublic void getWeal() {System.out.println("5元优惠券");}}/*** 等级2会员福利*/
@Component
public class LV2MemberWeal implements MemberStrategy{@Overridepublic void getWeal() {System.out.println("10元优惠券");}}

上下文角色:

我们可以使用枚举加bean工厂来定义一个上下文角色,避免上下文角色的if-else

策略枚举类

策略枚举类用于获取bean容器中的策略类class

/*** 策略枚举*/
public enum MemberEnum {LV1(LV1MemberWeal.class),LV2(LV2MemberWeal.class);;private Class clazz;MemberEnum(Class clazz) {this.clazz = clazz;}public static Class getStrategyClass(String name){return MemberEnum.valueOf(name).clazz;}}

使用ApplicationContext可以获取bean工厂中的实例,下面是对应工具类

@Component
public class ApplicationContextUtil implements ApplicationContextAware {private static ApplicationContext applicationContext;/*** 将ApplicationContext注入* @param applicationContext* @throws BeansException*/@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}public static ApplicationContext getApplicationContext(){return applicationContext;}/*** 根据类型获取bean* @param clazz* @param <T>* @return*/public static <T> T getBean(Class clazz){return (T) getApplicationContext().getBean(clazz);}/*** 根据名称获取bean* @param name* @param <T>* @return*/public static  <T> T getBean(String name){return (T) getApplicationContext().getBean(name);}}

上下文角色类

/*** 会员上下文角色*/
@Component
public class MemberStrategyContext {/*** 根据入参类型获取对应的策略类* @param type* @return*/public MemberStrategy getMemberStrategy(String type){MemberStrategy memberStrategy = ApplicationContextUtil.getBean(MemberEnum.getStrategyClass(type));return memberStrategy;}}

测试类

RunWith(SpringRunner.class) //作用:让当前类在容器环境下进行测试
@SpringBootTest(classes = DemoApplication.class)
public class StrategyTest {@Autowiredprivate MemberStrategyContext memberStrategyContext;@Testpublic void testStrategy(){//根据入参获取对应策略类MemberStrategy memberStrategy = memberStrategyContext.getMemberStrategy("LV2");//执行策略类的算法memberStrategy.getWeal();}}
http://www.yayakq.cn/news/814886/

相关文章:

  • 电商网站开发报价单wordpress 获取摘要
  • 一般在什么网站上做电子请帖品牌策划方案ppt模板
  • 网页设计模板网站图片湖南长沙特色简介
  • 外贸网站推广收费艺考培训
  • 韩国情侣网站模板网站怎么做百度优化
  • 关于网站开发市问卷调查科技感的网站
  • 网站如何添加统计代码是什么意思网站建设需要什么硬件
  • 没建网站 备案wordpress英文主题哪个好用
  • 广州网站建设公司招聘wordpress 后台加入链接后_网站显示是标签_不是链接
  • 大厂县网站建设或SEO优化学网站开发容易吗
  • 青海省交通建设工程质量监督站网站诸城做网站建设的
  • 成品软件源码网站华强北 网站建设
  • 乐从容桂网站建设汕头站扩建效果图
  • 佛山网站建设wantsun游戏网站如何做
  • 网站建设的书 豆瓣wordpress模板制作兼职
  • 网站一般用什么软件做的广州网站设计开发招聘
  • 怎么建设自己的卡盟网站杭州 做网站
  • 上海高端网站建设定制设置网站标签
  • 网站被k文章修改自贡市建设局网站
  • 摄影看图网站WordPress mip 评论框
  • 绵阳网站建设wordpress w3 total cache
  • 国外网站网页设计网站建设礼品
  • 物流网站毕业设计工业设计东莞网站建设
  • 建博客网站东莞网站建设 钢结构
  • 仿租号网站源码网站开发规划设计公司年终总结
  • 农业电商网站建设ppt网站建设的基本步骤是哪些
  • 南昌县城乡规划建设局官方网站房地产宣传推广方案
  • 网站追踪如何做WordPress这新手
  • 搜索引擎优化包括哪些山西常见网站建设推荐优化
  • wordpress添加新php页面网站建设优化之优化关键字