学习
实践
活动
专区
工具
TVP
写文章

Android设计模式策略模式详解

策略模式 一个功能的效果,有不同的算法与策略,根据不同的选择选择不同的结果。 简单来说,只要你写过程序就用过策略模式,不要说没用过,难道if-else(switch)没用过吗….. if-else在其实就是一个策略模式的体现,根据不同的选择处理不同的结果。 问题 如果把所有的方法全部用if-else(switch)来处理,从功能上说没问题,但是冲代码层面的维护与使用来说,if-else多了之后会让类变的过于庞大,阅读不利,修改困难 解决问题 使用策略模式, 使用场景 同一个问题,有不同的解决方案 一个类有多个if-else的判断处理结果 封装SDK时上层处理结果返回的情况,调用者关心结果,不关注实现过程 列入Android源码中的动画的TimeInterpolator 7折后的价格:" + String.valueOf(priceAlgorithm2.getPrice(2))); (五)显示结果 1块钱5折后的价格:0.5 2块钱7折后的价格:1.4 总结 使用策略模式之后的维护只需要维护具体的实现类

38931

Android编程设计模式策略模式详解

本文实例讲述了Android编程设计模式策略模式。 这时就可以使用策略模式来解决。 二、定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 下面使用策略模式来进行实现。 工厂模式 策略模式 创建型的设计模式 行为型的设计模式 关注对象创建 关注行为的选择 黑盒子(无需知道具体的实现过程) 白盒子(知道具体的实现过程) 七、Android源码中的策略模式实现 随着技术的发展 View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》 希望本文所述对大家Android程序设计有所帮助。

64110
  • 广告
    关闭

    9块9,云智绘帮您轻松搞定营销设计!

    10万模板,1亿优质图库,正版商用授权,涵盖电商、banner海报、新媒体配图、教育培训海报、H5等各种场景

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    设计模式设计模式--策略模式

    朋友觉得我为了几块钱这么墨迹,付完钱拉着我就走了,问我:“你说的什么模式怎么回事?” 我说超市收银系统就是很好的策略系统,就是一个典型策略模式。 多收了2块5,心疼死我了,我慢慢给你讲! ? 策略模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 策略模式和简单工厂模式的结合:把分支判断放到环境角色中。 模式讲解 策略模式功能:把具体算法从具体业务处理中独立 策略模式与if-else语句:多个if-else出现考虑使用策略模式 算法的平等性:策略算法是形同行为的不同实现 谁来选择具体策略算法:客户端

    23520

    设计模式-策略模式

    策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。(Java的TreeSet集合中,构造方法可传入具体的比较器对象以实现不同的排序算法。 就是利用的策略模式策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中, 从而使得它们可以相互替换,使用策略模式可以把行为和环境分割开来。 [image.png]设计类图[image.png] 最后我们整合鸭子的行为,分别将鸭子的飞行与嘎嘎叫的动作 "委托"(delagate)别人处理,而不是定义在Duck类中。 通过组合代理的模式实现飞行与嘎嘎叫的功能,持有策略类(飞行,呱呱叫)的引用。 提供set方法指定不同的策略,然后通过 performFly 与 performQuack 委托对应的策略实现。 我们是不是还可以使用策略模式代替很多的if else 判断执行不同的算逻辑?这里留给读者去发现使用场景。

    25510

    设计模式~策略模式

    一般而言,有意义的策略模式的应用都会涉及到多于一个的具体策略角色。 模式的实现 策略模式实现要注意的地方: 1. 经常见到的是,所有具体的策略类都有一些公关的方法。 排序策略系统 假设要设计一个排序系统,动态的决定采用二元排序(Binary Sort)、泡沫排序(Bubble Sort)、堆栈排序(Heap Sort)、 快速排序(Quick Sort)、基数排序( 显然,采用策略模式把几种排序算法包装到不同的算法类里面,让所有的算法类具有相同的接口,就是一个很好的设计。 排序策略系统的设计如下: ? 此时,使用策略模式,把这些行为转移到相应的具体策略类里面,就可以避免使用难以维护的多重条件选择语句,并体现面向对象设计的概念。 策略模式的优点和缺点 优点: 策略模式提供了管理相关算法族的办法。 策略模式造成很多的策略类。有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略设计成可共享的,这样策略类实例可以被不同的客户端使用。也就是说,可以使用享元模式来减少对象的数量。

    25570

    设计模式--策略模式

    模拟鸭子项目: 不使用设计模式的方案: 传统继承方式如下: 鸭子超类: public abstract class Duck { public void Quack() { System.out.println 不是好的设计方式 需要新的设计方式,应对项目的扩展性,降低复杂度:   1)分析项目变化与不变部分,提取变化部分,抽象成接口+实现;   2)鸭子哪些功能是会根据新需求变化的?叫声、飞行... 用策略模式来解决新需求 接口: public interface FlyBehavior { void fly();} public interface QuackBehavior = new GaGaQuackBehavior();  //实现了叫声接口的类(可以多个) } @Override public void display() {...} } 策略模式模式让行为算法的变化独立于算法的使用者。 经验:多用组合来实现设计。 更详细的解释参考:http://www.cnblogs.com/zuoxiaolong/p/pattern8.html

    17110

    设计模式 | 策略模式

    说明 定义:将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,并让它们可以相互替换,这种模式就是策略模式。 简而言之就是多种条件对应多种操作, 对应条件使用对应操作类, 这些操作类叫做策略。 那么有了这些策略, 我们还需要一个操作策略的, 不能光写if条件实例化不同类啊, 那么这个时候需要一个Context对象, 我们传递什么策略它来帮我们执行对应策略的方法, 策略方法也不是随便写的, 需要接口约束 Context(new WxPay()); $wxStraegy->genPayParams(); // 生成微信支付参数 $wxStraegy->callback(); // 微信回调做事 结束语 策略模式可以很大程度上解决耦合 ,算法可以随便改动,并不会影响到使用者,缺点也不是很大问题,使用者必须知道所有策略并选择对应策略策略类会逐步增多。

    21020

    设计模式策略模式

    今天说一下策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 换句话说策略模式,是指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,比如吃东西的行为 策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。   看一下简单的代码实现 #region 策略模式 #region 抽象策略 public abstract class Stratety { public abstract } } #endregion static void Main(string[] args) { #region 策略模式 策略模式的优点:      1.提供了管理相关算法族的方法。      2.可以避免使用多重条件转移语句。

    34670

    设计模式-策略模式

    【导读】业务场景中,很多需要根据具体情况选择不同的处理方式,比如出行该选择何种交通方式,商场的活动的促销策略等。这就是策略模式策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。 二、实例 就以商场促销策略为例,有满减策略、返现策略等。 策略: //抽象的策略对象 public interface PromotionStrategy { void doPromotion(); } //具体的返现策略 public class 四种分别是: AbortPolicy:直接抛异常策略 CallerRunsPolicy:调用者策略,将任务返回给调用者执行 DiscardOldestPolicy:直接丢弃等待时间最长的线程策略 DiscardPolicy :直接丢弃线程策略

    18210

    设计模式-策略模式

    策略模式 Strategy Pattern: Define a family of algorithms, encapsulateeach one, and make them interchangeable 定义一系列算法,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 ? 策略模式登场 既然这个行为(方法)具有如此多的变化性,不妨把它抽取出来。在角色类中我们只说执行使用武器的方法,具体的武器另实现。让具体的角色调用具体的武器。 类图变为图2: ? 你要调用的就是策略策略策略。 原来策略模式用起来就是这样的啊,我的天,建了这么多类。 在上下文中找出行为策略,新建各种策略类,客户端去调用吧。 策略模式优点: 对“开闭原则”完美支持; 提供了管理相关的算法族的办法 提供了可以替换继承关系的办法 避免使用多重条件转移语句 提供了一种算法的复用机制 策略模式缺点: 客户端必须知道所有的具体实现的策略

    27920

    设计模式—–策略模式

    策略模式 定义 所谓策略模式就是定义了算法族,分别封装起来,让他们之前可以互相转换,此模式让该算法的变化独立于使用算法的客户 理解 **策略这个词应该怎么理解,打个比方说,我们出门的时候会选择不同的出行方式 A的具体算法实现"); } } 4.Client 客户端 下面依次更换策略,测试一下策略模式 public class StrategyClient { public static void 实例一: ​ 我们都知道排序算法有很多种,但是什么时候选择冒泡排序,什么时候选择选择排序,什么时候选择插入排序,所以这里用排序算法来演示策略模式的实现 public void selectSort 所以在对于这样的情景是非常合适使用策略模式的。 那么如何使用策略模式呢?首先我们需要定义一个接口,该接口提供排序算法,然后定义想要的排序算法,实现给接口即可。 7.注意事项 如果一个系统的策略多于四个,就需要考虑使用混合模式来解决策略类膨胀的问题

    26610

    🔥【设计模式策略模式

    多数平台的权限规则往往是随着平台的迭代而变化的,那这样的话,这个函数将会逐渐变大,难以维护,因为我们模拟的时候只是简单的判断,实际项目中往往还会配合着数据库的查询等等更为复杂的处理,各式各样的权限要求加复杂的算法的情况下我们考虑使用策略模式来进行一次优化 使用策略模式进行优化 我们的代码在ts环境编写,懒得搭建ts环境的可以使用在线的编辑器:如:https://codesandbox.io/ 1. const user1 = { role: Role.general, members: Members.senior }; // 策略+组合模式 const hdVideoStrategy // 用户信息 const user2 = { role: Role.admin }; // 策略+组合模式 const mpStrategy = new ManagementPlatformStrategy "可以" : "不可以" ); 总结: 暂时性的代码量增加了不少,但是我们在新增和修改策略的时候变得更加的明确,复杂的算法也从haveAuthorized方法中抽离到了指定的策略中,虽说不应该为了设计模式而用设计模式

    7130

    设计模式----策略模式

    策略模式策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 策略模式的结构: 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,这一系列策略类作为一个抽象策略类的子类。 这些具体的游戏卡类就是一组策略类。该模式的基础应该是面向对象语言的上溯造型语言特性和动态绑定机制。 这个模式涉及到三个角色: 环境角色:持有一个策略接口/抽象类的引用,如上述例子的游戏机类。 : 策略模式的重心:不是如何实现算法,而是如何组织、调用算法以取得较好的维护性和扩展性。 算法的平等性:一组策略模式在地位上是相互平等的,因此可以相互替换。可以认为一组策略算法是相同行为的不同实现。 运行时策略的唯一性:每一个时刻只能使用一个具体的策略实现对象。

    28400

    设计模式——策略模式

    设计模式——策略模式 强烈推介IDEA2020.2破解激活,IntelliJ IDEA 一、策略模式基本介绍 ---- 【1】策略模式(Strategy Pattern)中,定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的用户。 【2】这算法体现了几个设计原则,第一:把变化的代码从不变的代码中分离出来;第二:针对接口编程而不是具体的类(定义了策略接口);第三:多个组合/聚合,少用继承(客户通过组合方式使用策略) 【3】多重条件语句不易维护 二、策略模式结构类图 ---- 策略模式是准备一组算法,并将这组算法封装到一系列的策略类里面,作为一个抽象策略类的子类。 data,comparator); //[1, 3, 5, 6, 8] System.out.println(Arrays.toString(data)); } } 所属专题 设计模式

    13940

    设计模式---策略模式

    策略模式 为什么使用策略模式? 策略模式包含角色 策略模式的类图 排序案例 策略模式的优点 策略模式的缺点 适用场景 源码分析策略模式的典型应用 Java Comparator 中的策略模式 参考文章 ---- 为什么使用策略模式? 实现某一个功能有多条途径,每一条途径对应一种算法,此时我们可以使用一种设计模式来实现灵活地选择解决途径,也能够方便地增加新的解决途径。 ---- 策略模式的类图 策略模式需要一个策略接口,不同的策略实现不同的实现类,在具体业务环境中仅持有该策略接口,根据不同的场景使用不同的实现类即可。 面向接口编程,而不是面向实现。 换言之,策略模式只适用于客户端知道所有的算法或行为的情况。 策略模式将造成系统产生很多具体策略类,任何细小的变化都将导致系统要增加一个新的具体策略类。

    25630

    设计模式-策略模式

    策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。 策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。 策略模式有以下优点: 多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句。 策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。 策略模式可以提供相同行为的不同实现,客户可以根据不同时间或空间要求选择不同的。 策略模式提供了对开闭原则的完美支持,可以在不修改原代码的情况下,灵活增加新算法。 策略模式把算法的使用放到环境类中,而算法的实现移到具体策略类中,实现了二者的分离。 模式结构 策略模式是准备一组算法,并将这组算法封装到一系列的策略类里面,作为一个抽象策略类的子类。

    6510

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • 游戏多媒体引擎

      游戏多媒体引擎

      游戏多媒体引擎(GME)提供一站式语音解决方案。针对不同场景进行深度优化,覆盖游戏、社交、娱乐等多种泛互联网行业应用场景。提供实时语音、语音消息及转文本、语音分析服务,一次接入即可满足多样化的语音需求。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券