策略模式
2015.03.09
xiazdong
 热度
℃
介绍
- 定义:将可变的部分从程序中抽离出来变成算法接口(即策略接口),在该接口下分别封装了一系列算法实现(每个算法实现都是一个实现策略接口的具体类)。
- UML 图:如下。
- 应用场景:上面的 UML 图就是策略模式很典型的应用场景:支付场景。当你在网上购物,并进入支付界面,系统会列出一堆可用的支付方式:招商银行、工商银行、支付宝等方式。因此这里 PaymentMethod 接口表示支付策略;Visa, Paypal, MobilePayment 类就是具体的支付策略;你只需要通过在客户端预留
setPaymentMethod(PaymentMethod m)
方法并且在该方法中设置 PaymentMethod paymentMethod
的成员变量为某个支付策略,这样就只需要调用 paymentMethod.pay(money)
即可完成支付。实现代码如下:
IPaymentMethod.java
public interface IPaymentMethod { public void pay(double money); }
|
Visa.java
public class Visa implements IPaymentMethod{ @Override public void pay(double money) { System.out.println("Visa:" + money); } } `
|
PayPal.java
public class PayPal implements IPaymentMethod { @Override public void pay(double money) { System.out.println("PayPal:" + money); } }
|
MobilePayment.java
public class MobilePayment implements IPaymentMethod { @Override public void pay(double money) { System.out.println("MobilePayment:" + money); } }
|
Client.java
public class Client { private IPaymentMethod mPaymentMethod; public void setPaymentMethod(IPaymentMethod paymentMethod){ this.mPaymentMethod = paymentMethod; } public void pay(double money){ mPaymentMethod.pay(money); } public static void main(String args[]){ Client client = new Client(); IPaymentMethod m = new Visa(); client.setPaymentMethod(m); client.pay(100); } }
|
Android 中的应用:setAdapter()
策略模式其实在 Android 中很常见,最明显的就是 ListView 中的适配器(Adapter)策略。类图如下:
通过将上图与文章最前面的图相比,可以看出:
- ListView 就是 Client。
- ListAdapter 接口是策略接口;BaseAdapter, HeaderViewListAdapter 是具体的策略。