策略模式与状态模式
2016-08-19 15:41
295 查看
1、定义
策略模式:定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换。策略模式让算法独立于使用它的客户而独立变化状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类
2、使用场景
策略模式:1)、针对同一类型问题的多种处理方式,仅仅是具体行为有差别时2)、需要安全地封装多种同一类型的操作时3)、出现同一抽象类有多个子类,而又需要使用if-else或者switch-case来选择具体子类时4)、根据里式替换原则,任何出现父类的地方都可以使用它的子类去替换,这样符合我们的业务需求状态模式:1)、一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为2)、代码中包含大量的与对象状态有关的条件语句
3、实例分析
策略模式策略模式通常在商场打折,公交换乘等场景下比较普遍这个实例主要参考这篇文章,需要知道细节的可以查看《JAVA与模式》之策略模式Android中的策略模式举例:1、Android中通过对Animation对象设置不同的插值器来设置不同的动态效果,这其中就使用到了不同的插值器(定义一个动画的变化率)算法备注:分析的Android源码的版本为6.0 API 24
2、属性动画中另外一个应用策略模式的地方就是估值器(TypeEvaluator是一个接口),它的作用是根据当前属性改变的百分比来计算改变后的属性值。该属性和插值器是类似的,有几个默认的实现。3、Volley框架中的重试策略接口4、各大图片缓存库(ImageLoader、Picasso、Glide、Fresco)的图片缓存加载策略等等5、定制带有不同Indicator(圆形、线性、Tab、图标等等)的ViewPager状态模式策略模式的行为是彼此独立的,可相互替换的,但是状态模式的行为却是平行的,不可替换的例如电视在开机状态和关机状态下的行为操作是平行存在的Android中的状态模式举例:1、Wi-Fi管理中的状态模式2、Android中的StateMachine机制就是一个State模式的应用,可以处理多状态的复杂场景,强大而精妙在《Android源码设计模式解析与实战》一书中有一个很实用的例子能够让我们比较通俗地理解状态模式即:用户登录系统,在用户已登录和未登录的情况下,对于同一事件的处理行为是不一样的场景是这样的:在新浪微博中,用户在未登录的情况下点击转发按钮,此时会先让用户登录,然后再执行转发操作。如果是已经登录的情况下,那么用户输入转发的内容后就可以直接进行操作。可见,在这两种状态下,对于转发这个操作的处理是完全不一样的,当状态改变时,对于转发操作的行为发生了改变当对象的行为随对象的状态的改变而改变时,我们为了解耦多重判断条件,封装行为的变化,可以定义一个抽象的状态类,提供对象行为接口。具体与状态相关的行为,由它的子类去实现
4、优缺点
策略模式的优点:结构清晰明了、使用简单直观耦合度相对而言较低,扩展方便操作封装也更为彻底,数据更为安全策略模式的缺点:随着策略的增加,子类也会变得繁多状态模式的优点:状态模式将所有与一个特定的状态相关的行为都放入一个状态对象中,它提供了一个更好的方法来组织与特定状态相关的代码,将繁琐的状态判断转换成结构清晰的状态类族,在避免代码膨胀的同事也保证了可扩展性与可维护性状态模式的缺点:状态模式的使用必然会增加系统类和对象的个数5、参考
《Android源码设计模式解析与实战》相关文章推荐
- 话说状态模式和策略模式
- 状态模式(state pattern)和策略模式(strategy pattern)
- 状态模式----pk------策略模式
- 模式开篇,策略模式,状态模式
- 状态模式--策略模式--代理模式
- [★] .NET 偶尔连接的设计策略 -联机状态- 脱机模式- 数据同步
- 对比Java设计模式编程中的状态模式和策略模式
- java设计模式(二)—— 装饰、门面、享元、原型、状态、策略
- 策略模式的孪生兄弟---状态模式
- Unity客户端框架笔记(状态模式和策略模式在游戏中的应用)转
- 策略模式与状态模式
- 策略模式与状态模式
- 设计模式之状态模式和策略模式
- 策略模式和状态模式的区别2
- 对策略模式与状态模式的一点思考
- 状态模式 策略模式
- 设计模式:状态模式和策略模式的比较
- 设计模式:状态模式和策略模式的比较blogdown的专栏
- 状态模式和策略模式比较
- (一)委托模式简介 委托模式是基本的设计模式之一。委托,即是让另一个对象帮你做事情。 许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。 委托模式使得我们可以用聚合