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

网站建设策划书附录惠安县道安办网站建设

网站建设策划书附录,惠安县道安办网站建设,域名注册的网址,网站建设主机的功能策略模式是一种行为设计模式,就是定义一系列算法,然后将每一个算法封装起来,并使它们可相互替换。本模式通过定义一组可相互替换的算法,实现将算法独立于使用它的用户而变化。 Strategy is a behavioral design pattern that def…

策略模式是一种行为设计模式,就是定义一系列算法,然后将每一个算法封装起来,并使它们可相互替换。本模式通过定义一组可相互替换的算法,实现将算法独立于使用它的用户而变化。

Strategy is a behavioral design pattern that defines a series of algorithms, then encapsulates each algorithm and
makes them interchangeable. This pattern enables algorithms to vary independently of the users who use them by
defining a set of interchangeable algorithms.  

结构设计

为实现一系列可相互替换的算法,可定义一个公共接口,然后定义一组实现该接口的具体策略,这样就可在上下文中使用该接口调用具体策略上定义的算法。
Context,上下文,维护指向具体策略的引用,且仅通过策略接口与该对象进行交流。上下文,可以维护一个对策略对象的引用,这符合组合设计原则。
上下文,定义了一个接口以封装对策略对象的访问。如果策略对象直接暴露给外部使用,会导致其内部实现细节的暴露,从而增加接口使用难度。
Strategy,策略基类或策略接口,声明了一个上下文用于执行策略的方法。
ConcreteStrategy,具体策略类,实现了策略类声明的方法。
策略模式类图表示如下:
请添加图片描述

伪代码实现

接下来将使用代码介绍下策略模式的实现。

// 1、抽象策略类,声明执行策略的方法
public interface IStrategy {void operation(String paramStr);
}
// 2、具体策略类A,实现策略接口声明的方法
public class ConcreteAStrategy implements IStrategy {@Overridepublic void operation(String paramStr) {System.out.println("do some thing in the concrete A instance");}
}
// 2、具体策略类B,实现策略接口声明的方法
public class ConcreteBStrategy implements IStrategy {@Overridepublic void operation(String paramStr) {System.out.println("do some thing in the concrete B instance");}
}
// 3、策略上下文,维护指向具体策略的引用,且仅通过策略接口与该对象进行交流。这里提供两种使用策略类的方式。
public class StrategyContext {private static final Map<String, IStrategy> STRATEGY_MAP;private IStrategy strategy;static {STRATEGY_MAP = new HashMap<>();STRATEGY_MAP.put("type A", new ConcreteAStrategy());STRATEGY_MAP.put("type B", new ConcreteBStrategy());}public StrategyContext() {}public StrategyContext(IStrategy strategy) {this.strategy = strategy;}public void doSomething(String paramStr) {strategy.operation(paramStr);}public void doSomething(String strategyType, String paramStr) {IStrategy currentStrategy = STRATEGY_MAP.get(strategyType);if (Objects.isNull(currentStrategy)) {throw new RuntimeException("strategy is null");}currentStrategy.operation(paramStr);}
}
// 4、策略模式客户端
public class StrategyClient {public void test() {StrategyContext strategyContextA = new StrategyContext(new ConcreteAStrategy());strategyContextA.doSomething("TEST");StrategyContext strategyContextB = new StrategyContext();strategyContextB.doSomething("type B", "TEST");}
}

适用场景

在以下情况下可以考虑使用策略模式:
(1) 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
(2) 一个系统需要动态地在几种算法中选择一种, 可考虑使用策略模式。
策略模式能够将对象关联至可以不同方式执行特定子任务的不同子对象,从而以间接方式在运行时更改对象行为。
(3) 当类中使用了复杂条件运算符(如多重的条件选择语句)以在同一算法的不同变体中切换时, 可使用该模式。
策略模式可将所有继承自同样接口的算法抽取到独立类中,因此可以不需要条件语句。原始对象并不实现所有算法的变体,而是将执行工作委派给其中的一个独立算法对象。
(4) 不希望客户端知道复杂的、与算法相关的数据结构,在具体策略类中封装算法和相关的数据结构,提高算法的保密性与安全性。
策略模式让你能将各种算法的代码、 内部数据和依赖关系与其他代码隔离开来。 不同客户端可通过一个简单接口执行算法, 并能在运行时进行切换。

优缺点

策略模式有以下优点:
(1) 符合开闭原则。可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。
(2) 定义一系列可重用的算法。策略模式提供了管理相关的算法族的办法。
(3) 使用组合来代替继承。实现支持多种算法或行为的方法。
(4) 避免使用多重条件语句。当不同的行为堆砌在一个类时,很难避免使用条件语句来选择合适的行为。如果将行为封装在一个个独立的Strategy类中,则可消除这些条件语句。
如使用字典的初始化从文件中读取的方式,就可将策略配置移除到外部,从而进一步减少不必要的代码修改。
但是策略模式也存在以下缺点:
(1) 如果使用的算法极少发生改变,那么没有任何理由引入新的类和接口。使用策略模式只会让程序过于复杂。
(2) 策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。
(3) 许多现代编程语言支持函数类型功能,允许在一组匿名函数中实现不同版本的算法。这样,就可以使用这些函数来替换策略对象,无需借助额外的类和接口来保持代码简洁。如在Java语言中是Lambda表达式,在C++语言中是函数指针。

参考

《设计模式 可复用面向对象软件的基础》 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 著, 李英军, 马晓星等译
https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/strategy.html 策略模式
https://refactoringguru.cn/design-patterns/strategy 策略模式
https://www.runoob.com/design-pattern/strategy-pattern.html 策略模式
https://www.cnblogs.com/adamjwh/p/11011095.html 简说设计模式——策略模式
https://blog.csdn.net/ShuSheng0007/article/details/88085445 秒懂设计模式之策略模式

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

相关文章:

  • 网站策划书电商修图技巧
  • 新网网站负责人核验现场拍摄照片电子件湖北洲天建设集团有限公司网站
  • 英语网站建设公司免费可以看污app秋葵
  • 网站建设和维护价格网站开发所需能力
  • 周大福网站建设主要工作成都h5网站建设
  • 太原网站建设与维护抖音代运营服务商排名
  • 网站个人空间网站地图提交地址
  • 平邑网站优化度娘网站灯笼要咋做呢
  • 全国网站排名国家信用信息系统年报
  • 网站建设要什么知识百度搜索风云榜小说排行榜
  • 广州做外贸网站建设南联做网站
  • 重庆有的设计网站大全用django做的网站
  • 大数据营销的缺点佛山百度提升优化
  • 怎么设计一个网站网站前端设计是什么意思
  • 企业网站的推广建议莱芜大集
  • 班级网站设计论文怎样做自己公司的网站
  • 网站备案购买软件开发工程师是程序员吗
  • 南城县建设局网站个人wordpress 主题
  • 哪些网站可以做帮助文档设计大师网站
  • 网站被重定向跳转苏州建站公司速找苏州聚尚网络
  • 收费做网站网站开发学多久
  • 视频在线直播网站建设网站备案后换空间
  • 建筑业务网站建设网站开发 功能不会写
  • 网站建设集约化中铁建设集团招标平台
  • 网站建设游戏开发wordpress4.8模板路径
  • 网站做的好坏主要看山西seo
  • 硚口区建设局网站wordpress后台更改语言
  • 建设电影网站的目的淘宝客建立网站
  • js网站评论框网站建设的一般步骤包括
  • 深圳做网站企业wordpress屏蔽ip