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

怎样做app网站建设河南春辉建设集团官方网站

怎样做app网站建设,河南春辉建设集团官方网站,旅游网站建设的概念,温州公司建设网站一、概述策略模式的用意是针对一组算法#xff0c;将每一个算法封装到具有共同接口的独立的类中#xff0c;从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化使用策略模式可以把行为和环境分割开来。环境类负责维持和查询行为类#xff0c;…一、概述策略模式的用意是针对一组算法将每一个算法封装到具有共同接口的独立的类中从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化使用策略模式可以把行为和环境分割开来。环境类负责维持和查询行为类各种算法则在具体策略类ConcreteStrategy中提供。由于算法和环境独立开来算法的增减、修改都不会影响环境和客户端。当出现新的促销折扣或现有的折扣政策出现变化时只需要实现新的策略类并在客户端登记即可。策略模式相当于可插入式Pluggable的算法。二、策略模式的结构策略模式是对算法的包装是把使用算法的责任和算法本身分割开委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面作为一个抽象策略类的子类。用一句话来说就是准备一组算法并将每一个算法封装起来使得它们可以互换。策略又称做政策Policy模式【GOF95】。下面是一个示意性的策略模式结构图这个模式涉及到三个角色环境Context角色持有一个Strategy类的引用。抽象策略Strategy角色这是一个抽象角色通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。具体策略ConcreteStrategy角色包装了相关的算法或行为。三、 示意性源代码public abstract class Strategy {abstract public void AlgorithmInterface(); }public class ConcreteStrategyA extends Strategy {// MethodsOverridepublic void AlgorithmInterface() {System.out.print(Called ConcreteStrategyA.AlgorithmInterface());} }// ConcreteStrategyB public class ConcreteStrategyB extends Strategy {// Methodspublic void AlgorithmInterface() {System.out.print(Called ConcreteStrategyB.AlgorithmInterface());} }// ConcreteStrategyC public class ConcreteStrategyC extends Strategy {// MethodsOverridepublic void AlgorithmInterface() {System.out.print(Called ConcreteStrategyC.AlgorithmInterface());} }// Context public class Context {// FieldsStrategy strategy;// Constructorspublic Context(Strategy strategy) {this.strategy strategy;}// Methodspublic void ContextInterface() {strategy.AlgorithmInterface();} }/// summary /// Client test /// /summary public class Client {public static void Main(String[] args) {// Three contexts following different strategiesContext c new Context(new ConcreteStrategyA());c.ContextInterface();Context d new Context(new ConcreteStrategyB());d.ContextInterface();Context e new Context(new ConcreteStrategyC());e.ContextInterface();} }四、 何时使用何种具体策略角色在学习策略模式时学员常问的一个问题是为什么不能从策略模式中看出哪一个具体策略适用于哪一种情况呢答案非常简单策略模式并不负责做这个决定。换言之应当由客户端自己决定在什么情况下使用什么具体策略角色。策略模式仅仅封装算法提供新算法插入到已有系统中以及老算法从系统中退休的方便策略模式并不决定在何时使用何种算法。五、 一个实际应用策略模式的例子下面的例子利用策略模式在排序对象中封装了不同的排序算法这样以便允许客户端动态的替换排序策略包括Quicksort、Shellsort和Mergesort。abstract class SortStrategy {// Methodspublic abstract void Sort(ListString list); }// ConcreteStrategy class QuickSort extends SortStrategy {// MethodsOverridepublic void Sort(ListString list) {// Default is QuicksortSystem.out.print(QuickSorted list );} }// ConcreteStrategy class ShellSort extends SortStrategy {// MethodsOverridepublic void Sort(ListString list) {//list.ShellSort();System.out.print(ShellSorted list );} }// ConcreteStrategy class MergeSort extends SortStrategy {// MethodsOverridepublic void Sort(ListString list) {//list.MergeSort();System.out.print(MergeSorted list );} }// Context class SortedList {// Fieldsprivate ListString list new ArrayList();private SortStrategy sortstrategy;// Constructorspublic void SetSortStrategy(SortStrategy sortstrategy) {this.sortstrategy sortstrategy;}// Methodspublic void Sort() {sortstrategy.Sort(list);}public void Add(String name) {list.add(name);}public void Display() {System.out.print( name);} }/// summary /// StrategyApp test /// /summary public class StrategyApp {public static void Main(String[] args) {// Two contexts following different strategiesSortedList studentRecords new SortedList();studentRecords.Add(Samual);studentRecords.Add(Jimmy);studentRecords.Add(Sandra);studentRecords.Add(Anna);studentRecords.Add(Vivek);studentRecords.SetSortStrategy(new QuickSort());studentRecords.Sort();studentRecords.Display();} }六、 在什么情况下应当使用策略模式在下面的情况下应当考虑使用策略模式1. 如果在一个系统里面有许多类它们之间的区别仅在于它们的行为那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。2. 一个系统需要动态地在几种算法中选择一种。那么这些算法可以包装到一个个的具体算法类里面而这些具体算法类都是一个抽象算法类的子类。换言之这些具体算法类均有统一的接口由于多态性原则客户端可以选择使用任何一个具体算法类并只持有一个数据类型是抽象算法类的对象。3. 一个系统的算法使用的数据不可以让客户端知道。策略模式可以避免让客户端涉及到不必要接触到的复杂的和只与算法有关的数据。4. 如果一个对象有很多的行为如果不用恰当的模式这些行为就只好使用多重的条件选择语句来实现。此时使用策略模式把这些行为转移到相应的具体策略类里面就可以避免使用难以维护的多重条件选择语句并体现面向对象设计的概念。七、 策略模式的优点和缺点策略模式有很多优点和缺点。它的优点有1. 策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类里面从而避免重复的代码。2. 策略模式提供了可以替换继承关系的办法。继承可以处理多种算法或行为。如果不是用策略模式那么使用算法或行为的环境类就可能会有一些子类每一个子类提供一个不同的算法或行为。但是这样一来算法或行为的使用者就和算法或行为本身混在一起。决定使用哪一种算法或采取哪一种行为的逻辑就和算法或行为的逻辑混合在一起从而不可能再独立演化。继承使得动态改变算法或行为变得不可能。3. 使用策略模式可以避免使用多重条件转移语句。多重转移语句不易维护它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起统统列在一个多重转移语句里面比使用继承的办法还要原始和落后。策略模式的缺点有1. 客户端必须知道所有的策略类并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别以便适时选择恰当的算法类。换言之策略模式只适用于客户端知道所有的算法或行为的情况。2. 策略模式造成很多的策略类。有时候可以通过把依赖于环境的状态保存到客户端里面而将策略类设计成可共享的这样策略类实例可以被不同客户端使用。换言之可以使用享元模式来减少对象的数量。
http://www.hkea.cn/news/14580551/

相关文章:

  • 建设企业网站都需要啥杭州网络推广外包
  • 做模具做什么网站网易企业邮箱功能介绍
  • 邢台网站设计哪家好wordpress 多站点注册
  • 企业集团网站源码最近新闻摘抄50字
  • 青海省住房和建设厅网站首页网页代码制作基础教程
  • 网站平台建设思路网页设计与制作教程 刘瑞新
  • 开发手机网站优秀网站网页设计
  • 网上做调查问卷赚钱的网站淘宝店铺如何和别的网站做链接
  • 金山专业网站建设中企动力公司
  • 相亲网站认识的可以做朋友wordpress建站服务器
  • 搜索引擎优化网站茂名建设公司网站
  • 移动网站开发服务上海市做网站
  • 手机网站静态模板做鞋子皮革有什么网站
  • 手机网站与appwordpress多页面
  • iis添加网站主机名动态wordpress模板
  • 免费公司网站怎么做企业网站的建立多少钱
  • 盐城企业做网站推广公司经营范围
  • 无忧网站建设价格网络文化经营许可证在哪里办
  • 网站设置成黑白建设工程合同的内容有哪些
  • 泰安网站建设排行东莞网站建设功能
  • html网站的上传招商加盟代运营公司
  • 郑州加盟网站建设阿里云域名注册查询
  • 上海外贸soho网站建设百度地图网页版在线使用
  • 建设个人网站多少钱黄岛做网站哪家好
  • 如何做h5 网站google 谷歌
  • 网站源码生成网站建设详细流
  • 株洲企业网站建设免费企业网站制作
  • 开发一个企业网站需要多少钱中国移动在线营销服务中心
  • 备案网站资料上传教程青阳做网站
  • 中山市城市建设档案馆网站公司建站文案给网站公司看的