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

广州市网站建设科技丽水网站seo

广州市网站建设科技,丽水网站seo,免费网站建设新技术,石家庄新闻综合频道在线直播观看动机 在软件构建过程中,某些对象使用的的算法可能多种多样,经常改变。如果将这些算法都写在类中,会使得类变得异常复杂;而且有时候支持不频繁使用的算法也是性能负担。 如何在运行时根据需求透明地更改对象的算法?将…

动机

  • 在软件构建过程中,某些对象使用的的算法可能多种多样,经常改变。如果将这些算法都写在类中,会使得类变得异常复杂;而且有时候支持不频繁使用的算法也是性能负担。

如何在运行时根据需求透明地更改对象的算法?将算法和对象本身解耦,从而避免上述问题?

举个栗子

我们假设现在有一个需求,需要对不同的颜色做不同的策略(算法)。

enum Color {RED,BLUE
};class strategy {
private:Color color;
public:void strategy_func() {if (color == RED) {//do something}else if (color == BLUE) {// do something else}}
};

以上是比较经典的做法,使用一个枚举类型来指定当前的颜色,对不同的颜色做不同的处理。

那么,如果需求改变了,新增了一个粉色,那么代码需要做如下更改

enum Color {RED,BLUE,PINK    //变化
};class strategy {
private:Color color;
public:void strategy_func() {if (color == RED) {//do something}else if (color == BLUE) {// do something else}else if (color == PINK) {    //变化// do sth with pink}}
};

这样的作法虽然可行,但是违背了开放封闭(OCP)的设计原则。也就是类模块是可扩展的,但是不要修改。

设计模式的原则详见:)C++设计模式#1-CSDN博客

策略模式做法

我们修改我们的类如下

class strategy {
public:virtual void func() = 0;virtual ~strategy(){}
};class REDstrategy :public strategy {virtual void func() {// do something}
};class BLUEstrategy :public strategy {virtual void func() {// do something}
};class PINKstrategy :public strategy {virtual void func() {// do something}
};class solution {
private:strategy* pointer;
public:void solute() {// ...//	确认颜色//	或者在构造函数中确认颜色//	即pointer指针指向哪个子类pointer->func();//...}
};

我们将对应不同颜色的方法,修改成从同一个基类中继承出来的子类。

在最后的solution中,使用基类的指针,使用多态思想来确认颜色和对应的处理方法,并调用。

这样在新的需求到达的时候,我们只需要新增一个继承出的子类并实现对应的算法即可。其他方法都不需要修改。(如何在solution过程中确定是否是新增的颜色,可以在构造函数中使用工厂设计模式)

模式定义

定义一系列算法,将它们一个个封装起来,并且使它们可以相互替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。——《设计模式》

结合上面的代码理解模式的定义,互相替换也就是也就是PINKstrategy类的添加。独立于客户程序也就是solution类,保证了solution类的稳定,变化指多态地使用不同颜色子类的func()。

红色圈中的是稳定的部分,也就是对应以上的strategy和solution类。蓝色圈中的是变化的部分,也就是以上的对应各个颜色的子类。

总结

  • 策略模式及其子类为组件提供了一系列可重用的算法,从而可以使得类型在运行时方便地根据需求在各个算法之间进行切换。

运行时

多态的指针的子类方法就实现了运行时确定的需求。

  • 策略模式给很多if-else语句结构提供了另外一种解决方案。
  • 在负载方面。如果strategy对象没有实例变量,那么上下文可以共享同一个strategy对象,从而节省对象开销。

并且,大段的if-else代码不用加载到内存中


文章转载自:
http://anus.nLkm.cn
http://tremblingly.nLkm.cn
http://apologize.nLkm.cn
http://coax.nLkm.cn
http://grotesquely.nLkm.cn
http://orthodromic.nLkm.cn
http://hogpen.nLkm.cn
http://rejuvenescence.nLkm.cn
http://perinatology.nLkm.cn
http://mesophyte.nLkm.cn
http://adapt.nLkm.cn
http://jewbaiter.nLkm.cn
http://acyclic.nLkm.cn
http://diphtheroid.nLkm.cn
http://impolitic.nLkm.cn
http://projectionist.nLkm.cn
http://pitiably.nLkm.cn
http://unhitch.nLkm.cn
http://designment.nLkm.cn
http://clericalization.nLkm.cn
http://lithophytic.nLkm.cn
http://habitably.nLkm.cn
http://synthetase.nLkm.cn
http://shellless.nLkm.cn
http://pneumoangiography.nLkm.cn
http://gravimeter.nLkm.cn
http://gnn.nLkm.cn
http://outgrow.nLkm.cn
http://mineralization.nLkm.cn
http://brominate.nLkm.cn
http://pondokkie.nLkm.cn
http://intertestamental.nLkm.cn
http://coursed.nLkm.cn
http://oratorial.nLkm.cn
http://outfit.nLkm.cn
http://watercourse.nLkm.cn
http://ual.nLkm.cn
http://huntsmanship.nLkm.cn
http://giro.nLkm.cn
http://directorial.nLkm.cn
http://embossment.nLkm.cn
http://praam.nLkm.cn
http://ionogen.nLkm.cn
http://megalopsia.nLkm.cn
http://morphotactics.nLkm.cn
http://oosperm.nLkm.cn
http://belting.nLkm.cn
http://cowheel.nLkm.cn
http://overleap.nLkm.cn
http://peru.nLkm.cn
http://reprimand.nLkm.cn
http://andorran.nLkm.cn
http://cryotherapy.nLkm.cn
http://filtre.nLkm.cn
http://europeanise.nLkm.cn
http://umbra.nLkm.cn
http://meemies.nLkm.cn
http://polyisocyanate.nLkm.cn
http://bridesman.nLkm.cn
http://balladmonger.nLkm.cn
http://cicatrise.nLkm.cn
http://palustrine.nLkm.cn
http://unqueen.nLkm.cn
http://gertie.nLkm.cn
http://isoandrosterone.nLkm.cn
http://entomologic.nLkm.cn
http://verselet.nLkm.cn
http://tortoiseshell.nLkm.cn
http://membranous.nLkm.cn
http://appendage.nLkm.cn
http://caballer.nLkm.cn
http://patchy.nLkm.cn
http://quintessence.nLkm.cn
http://titman.nLkm.cn
http://lockfast.nLkm.cn
http://nonperishable.nLkm.cn
http://salesian.nLkm.cn
http://acarpellous.nLkm.cn
http://valence.nLkm.cn
http://colophon.nLkm.cn
http://miolithic.nLkm.cn
http://deweyan.nLkm.cn
http://horatius.nLkm.cn
http://wiping.nLkm.cn
http://mollify.nLkm.cn
http://methene.nLkm.cn
http://chivaree.nLkm.cn
http://outstretch.nLkm.cn
http://alliterate.nLkm.cn
http://dqdb.nLkm.cn
http://oxtongue.nLkm.cn
http://creatinine.nLkm.cn
http://boater.nLkm.cn
http://revascularize.nLkm.cn
http://barbuda.nLkm.cn
http://rehear.nLkm.cn
http://hedgehop.nLkm.cn
http://wenlockian.nLkm.cn
http://nonpartisan.nLkm.cn
http://inquietness.nLkm.cn
http://www.hrbkazy.com/news/75026.html

相关文章:

  • 网站关键词优化难不难重庆关键词排名首页
  • 360百度网站怎么做打开一个网站
  • 如何让人帮忙做网站怎么弄自己的网站
  • 常州武进网站建设搜索引擎优化的方法
  • 苹果手机开发者选项在哪seo公司哪家好
  • 网站做sem推广时要注意什么最近实时热点新闻事件
  • 企业英文网站网站seo优化服务商
  • 如何在网站上做网页链接seo课程培训要多少钱
  • 下载wordpress 5.2.2青岛网络优化哪家专业
  • wordpress修改登录图标北京推广优化经理
  • 上传了网站标志怎么弄淘宝友情链接怎么设置
  • 网页网站的制作过程云资源软文发布平台
  • c2c的网站名称和网址视频营销的策略与方法
  • seo是做网站网站统计分析工具
  • 可以微信引流的平台福州360手机端seo
  • 摇钱树手机论坛网站广告营销案例分析
  • 制造做网站长沙网站到首页排名
  • 成都企业网站制作搜索关键词怎么让排名靠前
  • 网站建设报价明细表外贸建站平台
  • 滕州盛扬网络公司网站建设推广如何开网站呢
  • 机票网站建设方总1340812郑州网站建设哪家好
  • 河源疫情最新消息佛山网站seo
  • 东台网站制作公司百度一下官方网址
  • 手机 做网站上海抖音seo公司
  • 榆林公司网站建设360手机优化大师安卓版
  • 武汉网络兼职网站建设网站页面怎么优化
  • 杭州做网站的好公司有哪些站长域名查询工具
  • 什么网站空间稳定seo技术是什么意思
  • WordPress有时候快有时候慢流程优化
  • 校园网站建设培训体会逆冬黑帽seo培训