把这两个一起写 因为他们两个UML的代码接口非常的相似
工厂模式代码结构图
策略模式UML
在我们看完结构图后 感觉位移不同的就是Factory个Context 接下来我们取用代码实现以下看看具体有什么区别
公共的
public interface Pay {
void pay();
}
public class AliPay implements Pay {
private static final String TAG = "AliPay";
@Override
public void pay() {
Log.e(TAG, "AliPay");
}
}
public class WeChatPay implements Pay {
private static final String TAG = "WeChatPay";
@Override
public void pay() {
Log.e(TAG, "WeChatPay");
}
}
工厂模式:
public class PayFactory {
public static Pay creatPay(String payTye) {
Pay pay = null;
switch (payTye) {
case "WechatPay":
pay = new WeChatPay();
break;
case "AliPay":
pay = new AliPay();
break;
}
return pay;
}
}
策略模式:
public class MyPay {
private Pay pay;
public MyPay(Pay pay) {
this.pay = pay;
}
public void toPay() {
pay.pay();
}
}
现在我们来在代码上看一下不同
1.接受参数不同:工厂模式接受的是一个字符串 策略模式接受的是一个实体类
2.返回结果不同:工厂模式返回的是一个实体类 而策略模式直接执行方法。
总结简单工厂模式和策略模式
1.从类型上讲:简单的工厂模式处于创建型模式,而策略模式属于行为型模式
2.简单工厂模式:根据用户选择的条件,来帮用户创建一个对象
策略模式:用户给它一个创建好的对象,帮助用户去做一些事情
优缺点
通过比较客户端的代码发现:
简单工厂模式:将对象的选择创建交给了简单工厂类,客户端只需要输入相应的条件就可以,不用负责对象的创建,但是需要客户端自己调用算法类的方法。但是一旦需要增加新的运算类,比如开根运算,就要去修改简单工厂类。
策略模式:对象的选择创建仍需要自己来做,但是将调用方法的职责交给了策略类。一旦需要增加新的策略就需要添加新的子类 而且还要修改客户端。