ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

设计模式--策略模式

2021-06-27 19:57:56  阅读:180  来源: 互联网

标签:do search -- 多态 模式 strategy BaseStrategy 设计模式 行为


多态:同一类型的指针或引用在指向不同子类对象时可以表现出不同的行为。我们知道多态最常见的实现方式就是基类定义虚函数,派生类通过继承基类的函数后,对基类函数重写来实现。但是在项目中,往往出现表现多态的类本身改动很小,而该类簇的行为改动频繁,(或者可能行为的实现时算法同学负责,而多态类时我们架构同学负责)那么我们把多态类视为使用行为的上下文,把行为从中抽象出来定义成行为类,这就引出了多态实现的另一种方式:通过继承基类的行为对象成员,然后派生类将成员初始化为不同的行为派生类对象,这样在调用行为类对象的方法时就能表现出多态,而且行为类可以频繁改变,而不用改动上下文。

1. 类关系图:

SearchScenario BaseStrategy* _strategy search() VideoSearchScenario BaseStrategy* _strategy=RnnStrategy search() ImageSearchScenario BaseStrategy* _strategy=CnnStrategy search() TextSearchScenario BaseStrategy* _strategy=LtrStrategy search() BaseStrategy do_search() LtrStrategy do_search() RnnStrategy do_search() CnnStrategy do_search()

当然也不仅仅用于实现多态,将行为类从上下文类中抽离成类别,减少对上下文类的侵入性本身就是很好的设计。其类图如下,用户可以方便的通过set_strategy(BaseStrategy* concrete_startegy);为上下文类设置属性的方式,动态设定具体的行为对象。

VideoSearchContext BaseStrategy *_startegy set_strategy(BaseStrategy* strategy) search_video() BaseStrategy do_search() LtrStrategy do_search() RnnStrategy do_search() CnnStrategy do_search()

2. 使用场景

总结一下,策略模式的适用场景可以作为

  • 实现多态的新方式
  • 在上下文类改动小行为改动频繁的情况下(特别是不同部门来负责的情况下),抽离出行为类可以减少对上下文的侵入性。
  • 在类设计的角度,行为类的体量相当或者超过了上下文类的体量,那么行为不应该在类中直接定义,应该作为其成员对象,通过组合的方式实现功能。

标签:do,search,--,多态,模式,strategy,BaseStrategy,设计模式,行为
来源: https://blog.csdn.net/Android_chunhui/article/details/118278471

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有