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

湛江市建设规划局网站做h5的软件

湛江市建设规划局网站,做h5的软件,仙桃做企业网站的,哈尔滨优化网站排名所谓策略模式(Strategy Pattern)#xff0c;就是将策略 (算法) 封装为一个对象#xff0c;易于相互替换#xff0c;如同 USB 设备一样可即插即用#xff1b;如果将策略、具体的算法和行为#xff0c;编码在某个类或客户程序内部#xff0c;将导至事后的修改和扩展不易。 …  所谓策略模式(Strategy Pattern)就是将策略 (算法) 封装为一个对象易于相互替换如同 USB 设备一样可即插即用如果将策略、具体的算法和行为编码在某个类或客户程序内部将导至事后的修改和扩展不易。   当有多种「策略」时通常的作法就是将这些个策略和这些策略的算法、行为分别封装在各个类中并让这些类去继承某个公用的抽象类或接口。接着在客户 程序中就可动态引用且易于更换这些不同的「策略」不会因为日后添加、修改了某一个「策略」就得重新修改、编译多处的源代码。此即为一种「封装变化 点」的做法将常会变化的部分进行抽象、定义为接口亦即实现「面向接口编程」的概念。且客户程序 (调用者) 只须知道接口的外部定义即可具体的实现则无须理会。    策略模式(Strategy Pattern)在外形上与状态模式很相似但在意图上有些不同。其意图是使这些算法可以相互替换并提供一种方法来选择最合适的算法。    策略模式(Strategy Pattern)的UML图如下:                         在策略模式里主要有三种角色环境角色、抽象策略角色和具体策略角色。 1、环境(Context)角色持有一个抽象策略(Strategy)角色的引用。也叫上下文。 2、抽象策略(Strategy)角色这是一个抽象角色通常由一个接口或一个抽象类来实现。 3、具体策略(ConcreteStrategy)角色包装了相应的算法和行为。 下面我们用代码来示例策略模式程序如下图:                          一、策略模式基本思路示例1、环境(Context)角色 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyStrategyPattern {     #region 定义Context类    class Context     {         private Strategy _strategy;         #region 构造函数        public Context(Strategy strategy)         {             this._strategy  strategy;         }         #endregion        #region 定义算法接口        //具体的算法由传入的strategy对象的AlgorithmInterface方法来实现        public void ContextInterface()         {             _strategy.AlgorithmInterface();         }         #endregion    }     #endregion} 2、抽象策略(Strategy)角色 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyStrategyPattern {     #region 抽象策略类Strategy定义了具体策略类的共有算法接口     abstract  class Strategy     {         public abstract void AlgorithmInterface();     }     #endregion } 3、具体策略(ConcreteStrategy)角色using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyStrategyPattern {      //定义了一系列的具体策略类它们继承自抽象策略类     class ConcreteStrategyA : Strategy     {         public override void AlgorithmInterface()         {             Console.WriteLine(使用了算法A来处理Context对象);         }     }     class ConcreteStrategyB : Strategy     {         public override void AlgorithmInterface()         {             Console.WriteLine(使用了算法B来处理Context对象);         }     }     class ConcreteStrategyC : Strategy     {         public override void AlgorithmInterface()         {             Console.WriteLine(使用了算法C来处理Context对象);         }     } } 4、客户应用代码             #region 基本思路示例             Console.WriteLine(----策略模式基本思路示例----);             Context context;             //调用不同的算法来处理对象算法的差异在Context传参时(new ConcreteStrategyA())决定            context  new Context(new ConcreteStrategyA());             context.ContextInterface();             context  new Context(new ConcreteStrategyB());             context.ContextInterface();             context  new Context(new ConcreteStrategyC());             context.ContextInterface();             #endregion 二、求和计算的策略模式示例 1、环境(Context)角色CalculateContext. using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyStrategyPattern {     class CalculateContext     {         ICalculateStrategy _strategy;         public CalculateContext(ICalculateStrategy strategy)         {             _strategy  strategy;         }         public void PerformCalculation(Listint list)         {             Console.WriteLine(string.Format(对列表中所有整数求和结果为:{0}, _strategy.Sum(list)));         }     } } 2、抽象策略(Strategy)角色ICalculateStrategy using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyStrategyPattern {     interface  ICalculateStrategy     {         int Sum(Listint list);     } } 3、具体策略(ConcreteStrategy)角色CalculateStrategies using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyStrategyPattern {     #region 方法A     class ConcreteCalculateStrategyA : ICalculateStrategy     {         //利用List的Sum功能对List中整数求和        public int Sum(Listint list)         {             Console.WriteLine(----。使用方法A进行求和----);             return list.Sum();         }     }     #endregion     #region 方法B     class ConcreteCalculateStrategyB : ICalculateStrategy     {         //使用传统的遍历方法对List中整数求和        public int Sum(Listint list)         {             Console.WriteLine(----。使用方法B进行求和----);             int result  0;             foreach(int value in list)             {                 result  value;             }             return result;         }     }     #endregion } 4、客户应用代码            #region 求和计算的策略模式示例            Console.WriteLine(\n\n----求和计算的策略模式示例----);             Listint lst  new Listint();             lst.Add(3);             lst.Add(6);             lst.Add(8);             lst.Add(9);             CalculateContext caltext;             caltext  new CalculateContext(new ConcreteCalculateStrategyA());             caltext.PerformCalculation(lst);             caltext  new CalculateContext(new ConcreteCalculateStrategyB());             caltext.PerformCalculation(lst);             Console.ReadKey();             #endregion 效果如下图:                         总结Strategy Pattern 适用的情景1、应用中的许多类在解决某些问题时很相似但实现的行为有所差异。比如不同功能的程序都可能要用到「排序」算法。 2、根据运行环境的不同需要采用不同的算法。比如在手机、PC 计算机上因硬件等级不同必须采用不同的排序算法。 3、针对给定的目的存在多种不同的算法且我们可用代码实现算法选择的标准。 4、需要封装复杂的数据结构。比如特殊的加密算法客户程序仅需要知道调用的方式即可。 5、同上算法中的罗辑和使用的数据应该与客户程序隔离时。 Strategy Pattern 的优点 1、简化了单元测试因为每个算法都有自己的类可以通过自己的接口单独做测试。 2、避免程序中使用多重条件转移语句使系统更灵活并易于扩展。 3、高内聚、低偶合。 Strategy Pattern 的缺点 1、因为每个具体策略都会产生一个新类所以会增加需要维护的类的数量。 2、选择所用具体实现的职责由客户程序承担并转给 Context 对象并没有解除客户端需要选择判断的压力。 3、若要减轻客户端压力或程序有特殊考量还可把 Strategy 与 Simple Factory 两种 Pattern 结合即可将选择具体算法的职责改由 Context 来承担亦即将具体的算法和客户程序做出隔离。 前往设计模式学习笔记清单 Tag标签: 设计模式,Strategy策略模式转载于:https://www.cnblogs.com/smallfa/archive/2009/11/24/1609456.html
http://www.sadfv.cn/news/20321/

相关文章:

  • 新开传奇网站999c 创建一个网站怎么做
  • 怎么在自己电脑做网站手机免费建立网站
  • 临沂做网站建设的公司哪家好网络营销模式下品牌推广研究论文
  • 做金属小飞机的网站如何给网站挂黑链
  • 宁夏区建设厅网站天元建设集团有限公司朱华
  • 网站没排名要怎么做现在做外贸还能挣钱吗
  • 惠州市网站开发那个装修公司的网站做的好
  • 网站制作培训班做网站哪个软件好用
  • 怎么对一个网站做优化怎样自己做免费网站
  • 建设一个会员积分网站上海专业做网站的
  • 信息科技有限公司网站建设网站英文版是怎么做的
  • 北京教育学会网站建设ppt免费下载
  • 单位还能建设网站吗阿里云做网站怎么挣钱
  • 郑州营销网站建设公司网站建设的重点是什么
  • 网站备案级别济南国画网站济南网站建设公司
  • led灯散热片技术支持 东莞网站建设微信小程序ui模板
  • 万维网站域名php网站后台教程
  • 江苏SEO网站建设红塔网站制作
  • 万网做网站多少钱合肥高端网站建设工作室
  • 高质量的赣州网站建设wordpress字体怎么改
  • 网站建设分金手指排名五淄博做网站的哪家最好
  • 广告东莞网站建设技术支持内蒙古呼和浩特市邮编
  • 车辆保险网站vi设计一套多少钱
  • 做网站卖广告什么网站可以找人做设计师
  • 做网站三年3万块钱网站推广新手入门教程
  • 做旅游网站的意义seo推广效果怎么样
  • 网站底部模板wordpress怎么换log
  • 农产品网站建设投标书个人工作室网站源码带后台
  • 萍乡做网站的公司有哪些门户类网站有哪些
  • 企业营销型网站建设如何在网上推广项目