策略模式
恰巧这几天京东6.18活动,不少人都会趁着折扣买东西,那买东西要支付啊,我们就以支付来讲讲策略模式的应用
先上UML类图

不同的支付模式,其实都是都有一个共性,我们把他抽取出来,写一个接口
public interface IPay {
//支付
    void pay();
}
分别写三个实现类
public class QQPay implements IPay {
    public void pay() {
        Log.d("AAA","QQ支付");
    }
}
- 微信
public class WXPay implements IPay {
    public void pay() {
        Log.d("AAA","微信支付");
    }
}
- 阿里
好像京东和阿里有仇,我们拿来凑个数
public class ALPay implements IPay {
    public void pay() {
        Log.d("AAA","阿里支付");
    }
}
这些支付方式有了,还需要一个用到它们地方
public class Shopping {
    private IPay mPay;
    public Shopping(IPay pay){
        mPay=pay;
    }
    public void buy(){
        mPay.pay();
    }
}
好了,我们来调用测试一下
public class PayActivity extends AppCompatActivity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        chosePayMode();
    }
    public void chosePayMode(){
        Shopping qqShop=new Shopping(new QQPay());
        qqShop.buy();
        Shopping wxShop=new Shopping(new WXPay());
        wxShop.buy();
        Shopping alShop=new Shopping(new ALPay());
        alShop.buy();
    }
}
可以看到,Shopping类并不知道自己具体调用了哪种实现方式,它只需要负责购买就行,调用者想用什么支付方式,就用什么支付方式。
这就是策略模式,不但把高内聚低耦合特点表现了出来,同时又符合OCP原则,如果还有什么其他类型的支付,只要继承IPay接口就行了,而不用修改Shopping类,好好体会体会,是不是好处多多。
github:https://github.com/livesun
