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

南京网站设计公司大全手机主页网站哪个好用

南京网站设计公司大全,手机主页网站哪个好用,李嘉诚预言2025房价走势,uniapp商城源码23种策略模式之策略模式 文章目录 23种策略模式之策略模式前言优缺点使用场景角色定义UML模拟示例小结 前言 在软件开发中,设计模式是为了解决常见问题而提供的一套可重用的解决方案。策略模式(Strategy Pattern)是其中一种常见的设计模式&a…

23种策略模式之策略模式

文章目录

  • 23种策略模式之策略模式
    • 前言
    • 优缺点
    • 使用场景
    • 角色定义
    • UML
    • 模拟示例
    • 小结

前言

在软件开发中,设计模式是为了解决常见问题而提供的一套可重用的解决方案。策略模式(Strategy Pattern)是其中一种常见的设计模式,它属于行为型模式。该模式的核心思想是将不同的算法封装成独立的策略类,使得它们可以相互替换,而不影响客户端的使用。

策略模式与其他设计模式有一些明显的区别。与模板方法模式相比,策略模式强调算法的灵活性,允许在运行时切换不同的策略。与状态模式相比,策略模式更注重不同算法之间的替换性,而非状态的内部转换。

优缺点

优点
策略类之间相互独立,易于扩展和维护。

可以在运行时动态切换策略,灵活性高。

提供了一种可替代继承的方案,避免继承层次的臃肿。

缺点
客户端需要了解不同的策略类,增加了使用的复杂度。

策略模式增加了类的数量,可能会导致系统更加庞大。

使用场景

如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为
一个系统需要动态地在几种算法中选择一种
如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现
如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题

角色定义

  • 策略Context(上下文)

策略模式定义上下文角色本意是为了通过不同策略对象让上下文调用对应的算法或行为。

  • 策略抽象

策略抽象主要设定行为,定义策略需要具有哪些行为。

  • 策略实现

具体策略的实现,实现策略抽象行为具体细节。

UML

在这里插入图片描述

  • FruitMarket(策略抽象)
  • PapayaPeddler、KiwifruitPeddler、WatermelonPeddler(策略算法实现)
  • SellFruitsContext(策略Context)

模拟示例

//卖水果策略 上下文
public class SellFruitsContext{//水果市场策略抽象private FruitMarket fruitMarket;public SellFruitsContext() {}public SellFruitsContext(FruitMarket fruitMarket) {this.fruitMarket = fruitMarket;}//调用策略方法public void sellFruit(){this.fruitMarket.sellFruits();}
}
//水果市场 策略抽象
public interface FruitMarket {void sellFruits();
}
//策略实现者
public class KiwifruitPeddler implements FruitMarket {public void sellFruits() {System.out.println("卖猕猴桃咯,保熟!!");}
}public class PapayaPeddler  implements FruitMarket {public void sellFruits() {System.out.println("卖木瓜咯,瓜保熟!!");}
}public class WatermelonPeddler implements FruitMarket {public void sellFruits() {System.out.println("卖西瓜咯,瓜保熟!!");}
}
//定义类型枚举 通过 类型获取 对应的策略算法
public enum FruitEnum {KIWIFRUIT(1,KiwifruitPeddler.class),PAPAYA(2,PapayaPeddler.class),WATERMELON(3,WatermelonPeddler.class);//水果类型private Integer fruitType;//水果类型对应的策略算法private Class c;FruitEnum() {}FruitEnum(Integer fruitType, Class c) {this.fruitType = fruitType;this.c = c;}public FruitEnum getFruitEnumByType(Integer fruitType){for (FruitEnum value : FruitEnum.values()) {if(value.fruitType==fruitType)return value;}return null;}
}

小结

通过类型在枚举类获取对应策略算法实现类,将策略算法实现类传入策略上下文,通过策略上下文调用具体的策略算法。后期业务扩展可新增枚举数据添加策略算法实现类,完成对扩展业务的实现。

策略模式在代码重构的时候是很常见的,减少大量if else代码、增强代码扩展性、策略算法的灵活切换、避免单个条件重复判断,很多情况选择switch以及if else会比较多,但是随着业务复杂度业务代码量上来了,随之代码的扩展性以及可读性降低代码也显得极其臃肿,虽说对于每一种算法都要为其建立一种策略类,相对比较懒的程序员更愿意写if else,有时候也不要觉得策略算法实现类太多,因为策略算法的多少取决于你的业务复杂度,正是因为策略算法很多才体现出业务的复杂,才更需要用好策略模式。

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

相关文章:

  • 做百度网站每年的费用多少合适什么网站可以做兼职设计
  • seo网站排名全选三合一模板网站
  • 手机怎么建立自己网站300个吉祥公司取名大全
  • 烟台专业做网站的公司东凤镇 网站建设
  • 郑州网站建设郑州网站建设七彩科技健身器械网站建设案例
  • 做交互的网站基于诗歌网站开发开题报告
  • 网站建设项目计划网站一般做几个关键词
  • 网站源码防盗原理做电子商务网站需要学什么
  • 商城网站做推广方案酷站官网
  • 网站设计价格大概多少企业自己建网站怎么建
  • php做网站需要mysql么重庆免费注册推广网站
  • 微网站 免费模板前端可以做什么毕业设计
  • jsp制作网站湛江建设培训学校网站
  • 重庆建站公司哪个好网址缩短生成器
  • html设计网站温州网站建设方案表
  • 阿里巴巴网站怎么设计师网站录入
  • 河池市都安县建设局网站软件合集软件资料2023
  • 企业网站seo公司做网站用的语言
  • 汕头网站建设sagevis头部互联网公司有哪些
  • 打广告网站百度关键词搜索量查询
  • 手机做兼职的网站有哪些长春网站设计880元
  • 网站首页关键词设置网页微信登录不了提示为了安全考虑
  • 如何用flashfxp上传网站网站企业制作
  • 信息化建设 网站如何写一份食品的网站建设规划
  • 用自己电脑做服务器 网站吗wordpress 全站过滤
  • 直播网站开发框架网站简单代码
  • 上杭网站开发通辽网站设计
  • 企业网站建设 新闻宣传课程网站建设开题报告
  • 抚州建设网站的公司深圳网站设计公司哪个
  • 绵阳个人网站建设手机app商城定制公司