当前位置: 首页 > 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.tj-hxxt.cn/news/17339.html

相关文章:

  • wordpress用户注册协议seo新手入门教程
  • 高水平的徐州网站建设aso优化排名推广
  • 一台云服务器可以做多少个网站百度快照优化seo
  • 南皮县做网站山东自助seo建站
  • 哪个网站可以做付邮免费送活动seo网站推广seo
  • 服务器网站崩溃品牌活动策划
  • 三合一网站建设 万网关键词筛选
  • 免费网站推广中国联通业绩
  • 专做婚宴用酒是网站搜索引擎怎么做
  • 网站建设推广公司哪家权威宁波正规优化seo公司
  • 网站建设 收费标准啥是网络推广
  • 怎么进wordpress东莞seo软件
  • 如何设计微商城网站建设电销系统
  • 安徽建设工程信息网站现在做网络推广都有什么方式
  • 南京做网站公司地点凤山网站seo
  • 网站建设公司转型做什有免费推广平台
  • 网站手机端做app开发工具关键词搜索数据
  • 网站html5自适应屏幕大小百度网站客服
  • 太原网站建设培训学校企业如何进行搜索引擎优化
  • 如何分析竞争对手的网站台州关键词首页优化
  • h5免费制作软件扬州百度seo公司
  • 关于网站seo优化北京疫情最新情况
  • 垂直网站建设的关键因素页面优化的方法有哪些
  • 网站域名申请程序千锋教育培训机构地址
  • 杭州营销型网站制作南京seo推广优化
  • 德州中文网站建设最近一周新闻大事件
  • 网站推广信息怎么做百度识图鉴你所见
  • 网站转移空间以后ip会变化吗网页设计模板网站免费
  • 济南网站推广外贸推广平台哪家好
  • 网站建设公司市场定位如何创建网页链接