盒子
盒子
文章目录
  1. 介绍
  2. Android 中的应用:setAdapter()

策略模式

介绍

  • 定义:将可变的部分从程序中抽离出来变成算法接口(即策略接口),在该接口下分别封装了一系列算法实现(每个算法实现都是一个实现策略接口的具体类)。
  • 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 是具体的策略。
支持一下
扫一扫,支持xiazdong