代码结构图的区别
首先来看一下简单工厂模式:
再看一下策略模式:
看完他们的结构图,是不是有种很相似的感觉?唯一不同的就是 简单工厂类 和 Context类。接下来再看一下代码上有什么区别。
简单工厂类和Context类中代码的区别
简单工厂类:
public class BirdFactory
{
public static IBird CreateBird(string birdType)
{
IBird result = null;
switch (birdType)
{
case "dove":
result = new Dove();
break;
case "eagle":
result = new Eagle();
break;
default:
result = new NullBird();
break;
}
return result;
}
策略模式中的Context类:
class Context
{
CashSuper csuper;
public Context(CashSuper cs)
{
this.csuper = cs;
}
public double GetResult(double money)
{
//调用具体策略类的收费方法
return csuper.acceptCash(money);
}
}
1.首先看一下接收的参数:简单工厂类中的 CreateOperate 方法接收的是字符串,返回的是一个 Operation 对象;而 Context 类初始化时需要接收一个 CashSuper 对象。
2.简单工厂类中是根据接收的条件创建一个相应的对象,而 Context 类接收的是一个对象,可以调用方法去执行此对象的方法。
总结简单工厂模式和策略模式
1.从类型上说:简单工厂模式属于创建型模式,而策略模式属于行为型模式。
2.接下来,看一个小例子:
斧子有很多种,有一个工厂专门负责生产各种需求的斧子。
工厂模式:
1)根据你给出的目的来生产不同用途的斧子,例如要砍人,那么工厂生产砍人斧子,要伐木就生产伐木斧子。
2)即根据你给出一些属性来生产不同行为的一类对象返回给你。
3)关注对象创建
策略模式:
1)用工厂生产的斧子来做对应的事情,例如用砍人的斧子来砍人,用伐木的斧子来伐木。
2)即根据你给出对应的对象来执行对应的方法。
3)关注行为的选择
3.简单工厂模式:根据客户选择的条件,来帮客户创建一个对象。
策略模式:客户给它一个创建好的对象,它来帮客户做相应的事。
两种模式的优缺点
简单工厂模式:将对象的选择创建交给了简单工厂类,客户端只需要输入相应的条件就可以,不用负责对象的创建,但是需要客户端自己调用算法类的方法。但是一旦需要增加新的运算类,比如开根运算,就要去修改简单工厂类。
策略模式:对象的选择创建仍需要自己来做,但是将调用方法的职责交给了Context类。一旦需要增加新的策略需要修改客户端。
因此,简单工厂模式的缺点就是当有新的需求增加时,需要频繁的修改工厂类。策略模式,当有新的需求增加时需要修改的是客户端,客户端仍然承担着创建对象的职责,并没有减轻客户端的压力。