首页
学习
活动
专区
工具
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 总结 使用策略模式之后的维护只需要维护具体的实现类

55031

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

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

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

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

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

2K20

设计模式 | 策略模式

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

39520

设计模式--策略模式

模拟鸭子项目: 不使用设计模式的方案: 传统继承方式如下: 鸭子超类: 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

33510

设计模式策略模式

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

61870

设计模式--策略模式

策略模式是一种行为设计模式,它使您能够定义一系列算法,将它们封装起来,并根据需要在运行时轻松地切换它们。在策略模式中,算法被封装为单独的类,称为策略。...这些策略实现共同的接口或基类,并被传递给另一个类(称为上下文),该类维护对当前策略的引用。上下文可以使用策略执行其任务,同时在需要时切换策略。...下面是使用C#实现策略模式的实例代码:// 定义策略接口interface IStrategy{ int Execute(int a, int b);}// 实现不同的算法作为策略class AddStrategy...,`AddStrategy`和`MultiplyStrategy`是具体的策略实现。...`Context`类维护对当前策略的引用,并在执行任务时使用该策略。使用`SetStrategy`方法可以轻松切换策略

15830

设计模式~策略模式

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

40670

设计模式-策略模式

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

39510

设计模式-策略模式

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

56520

设计模式—–策略模式

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

46910

设计模式-策略模式

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

38610

🔥【设计模式策略模式

多数平台的权限规则往往是随着平台的迭代而变化的,那这样的话,这个函数将会逐渐变大,难以维护,因为我们模拟的时候只是简单的判断,实际项目中往往还会配合着数据库的查询等等更为复杂的处理,各式各样的权限要求加复杂的算法的情况下我们考虑使用策略模式来进行一次优化...使用策略模式进行优化 我们的代码在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方法中抽离到了指定的策略中,虽说不应该为了设计模式而用设计模式

22330

设计模式-策略模式

策略模式(Strategy Pattern)属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。...策略模式使得算法可以在不影响到客户端的情况下发生变化。 其主要目的是通过定义相似的算法,替换if else 语句写法,并且可以随时相互替换。...策略模式主要由这三个角色组成,环境角色(Context)、抽象策略角色(Strategy)和具体策略角色(ConcreteStrategy)。...: 扩展性好,可以在不修改对象结构的情况下,为新的算法进行添加新的类进行实现; 灵活性好,可以对算法进行自由切换; 策略模式缺点: 使用策略类变多,会增加系统的复杂度。...; 客户端必须知道所有的策略类才能进行调用; 使用场景: 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为;一个系统需要动态地在几种算法中选择一种

14820

设计模式-策略模式

不是的,是因为会员制度,不同的会员等级享受不同的折扣,这个很类似我们的策略模式,不同的角色可以定义不同的算法。 策略模式是什么?...策略模式(Strategy Pattern),属于行为模式,定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。...策略模式类图 ?...在spring中实现的策略模式实现: 抽象接口 ? 实现 ? ? ? ?...最后 策略模式在实现的研发过程中,真的很得非常普遍,比如订单价格计算,会员卡、活动等等无处不在的影子,而且实用性非常强,但是策略模式也有缺点就是一但策略类超过3个以上维护起来就不是很方便了,所以会加上其他模式组合使用比如策略

40130

设计模式---策略模式

优化案例最初版v0不使用策略模式的案例。四种不同的计算策略。客户端的代码如下。...实际上,单纯的策略模式就是如此,只负责减少方法调用的if语句,而不设计对象创建的封装与优化。...说到对象创建的优化,就得说到工厂模式了,事实上在使用策略模式时,为了创建对象也变得方便,通常也会使用到工厂模式进行优化。详情看以下优化案例。...缺点单纯的策略模式需要客户端对于各个实现类有足够的了解,提升了开发时对系统的理解难度。策略过多时,存在策略膨胀的问题。鉴于策略膨胀问题,应该慎用策略模式。这是使用混合模式或许可以解决这个问题。...混合模式即在策略模式的实现类的方法中使用if语句分割各个情况。适用场景想要优化系统中过多的if语句时。

17920

设计模式-策略模式

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

23310

设计模式---策略模式

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

53230
领券