策略模式
恰巧这几天京东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