设计模式之策略模式

来源:互联网 发布:高仿永硕e盘源码下载 编辑:程序博客网 时间:2024/05/01 20:33

1.设计原则

 1.策略模式的设计原则是吧一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口,然后再具体的类中包(上下文对象:context)含这个对象的实例,这样在实例运行中就可以随意调用实现了这个接口的类的行为。

2.主要实现了在环境对象中,引用了策略对象的抽象方法,在运行时,传递具体策略对象,以达到动态调用不同算法的目的

2.策略模式中的对象

(1) 环境对象:该类中实现了对抽象策略中的定义的接口或者抽象类的引用

 (2)   抽象策略对象:将需要的公共方法,在抽象类中进行声明

 (3)具体策略对象:封装了实现同功能的不同算法

3.举例

 商品促销活动中的各种打折算法。

1、8折优惠

 2、200以上7.5折策略

 3、满1000减200 




4、设计原则

1.“开-闭”原则

在策略模式中,可以在客户端程序运行的时候,动态的设置需要的具体策略,而不需要修改算法中的内部结构,每一个算法作为一个独立的实现,更容易扩展。

2.单一职责原则

在策略模式中,每一种策略都是使用的单独的一个类来实现的,因此各种策略之间没有任何的干扰。这种实现,有利于降低模块间的耦合性,能够有效防止一个策略的更改对于其余策略造成影响。

5、相关的设计模式

1.抽象工厂模式:在抽象工厂模式中,可以切换具体具体的工厂或者产品,策略模式中是切换算法

2.状态模式:二者都是采用对象组合的方式,但是状态模式切换的是状态,当状态发生改变时(拥有的状态,前期已经有所规定,而且主要解决系统中判断分支过多的问题),一定会切换委托对象的类实例。而策略模式切换的是算法,算法的相互替换,是由外部环境根据具体情况进行的切换(只需切换的算法,继承规范的策略接口),就可以无限制的扩展和切换

3.模板方式模式:(将已经确定的方法,在父类中是实现,未确定的方法,作为抽象方法,交给子类去实现)
6、使用场合

1.多个类的表现形式不同,需要在运行时动态选择具体要执行的行为的时候

2.当需要在不同的情况下使用不同的策略(比如金额满多少钱,实现某种优惠)

3.当一个类中出现了多种行为,而且在一个操作中使用多个条件分枝判断使用多种行为,也可以使用策略模式将各个条件分支的动作植入到具体策略中实现

7.java中设计的策略模式

ThreadPoolExecutor.


在ThreadPoolExecutor构造函数中

对应的四个策略


在threadPoolExecutor的构造函数中,需要传入一个handler ,此处就涉及到策略模式,根据具体需要传入具体的策略处理方式,来接受对于线程池对拒绝任务的处理

线程池具体使用方法

8.android中涉及的策略模式

android 中的setAdapter(adapter);此处就使用到了策略模式,根据自身需要,传入具体的adapter

eg:

1.ListView 继承于AbListView ,在AbListView中,声明了一个ListAdapter(1.接口形式,继承了adapter接口2.所有自定义的adaper都最终实现了listadapter)变量

在此中

1、listview相当于上下文,通过setAdapter方法,动态绑定具体的策略

2、ListAdapter(baseAdapter)相当于抽象策略方法,我们具体的实现的adapter为具体的策略方法

3、最后通过setAdapter(adapter),来动态改变策略




0 0