您的位置:首页 > 编程语言

我与大话设计模式之代码篇(二)----工厂方法模式

2015-11-22 15:58 393 查看
上篇学习了简单工厂模式,趁热打铁看一下工厂方法模式。

    工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

    看到定义我还是不是很懂,就理解了类的实例化可以延迟到子类。查阅了很多资料,看了很多小伙伴们的博客,这才理解了一些。工厂方法是用来制定一些规范,只要求但是不干事的空壳子,消费者要求什么他就制定什么样的要求和方法,但是具体实施对象是其子类,即父亲让孩子干啥孩子就得干啥,就像古代时候包办婚姻似的,家里的要求就是门当户对,不会考虑两个对象是否存在爱情,所以当时结婚男女双方都未见过彼此,直到洞房之夜才直到彼此的模样,大概的理解看来,我感觉工厂方法模式和从前的封建还是有一定关系的。

    在大话设计模式这本书中以雷锋依然在人间讲解的,就是具体的类都有自己的工厂,该干什么 都有具体的工厂负责,就像一个父亲有好几个儿子和女儿似的,女儿是要嫁出去的,儿子是用来养老的,并且每个儿子他们分工明确,父亲在老的时候可以在大儿子家居住一个月,二儿子家居住一个月,女儿负责看望,生病的时候看病的钱也需要平分或者按家庭条件来承担。

    简单工厂只有一个儿子或者一个女儿,而工厂方法模式就不同了,他多子多孙。下面是我对两种模式的大概理解,不知道对不对。

简单工厂模式:



工厂方法模式:



工厂方法模式实现的方法:

首先创建一个工厂接口:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">interface IFactory
{
Operation CreateOperation();
}</span></span>


然后创建具体工厂去实现这个接口。这里还是以加减乘除来举例:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">class AddFactory:IFctory   //加法类工厂
{
public Operation CreateOperation()
{
return new OPerationAdd();
}
}
class SubFactory:IFctory  //减法类工厂
{
public Operation CreateOperation()
{
return new OPerationSub();
}
}
class MulFactory:IFctory  //乘法类工厂
{
public Operation CreateOperation()
{
return new OPerationMul();
}
}
class DivFactory:IFctory  //除法类工厂
{
public Operation CreateOperation()
{
return new OPerationDiv();
}
}</span></span>


客户端代码主要就是利用接口调用具体的工厂就行,用到谁就喊谁:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">IFactory operFactory=new AddFactory(); //要用到的工厂
Operation oper=operFactory.CreateOperation();
oper.NumberA=1;//给要求
oper.nUmberB=2;
double result=oper.GetReault();//输出结果</span></span>


    我对工厂方法模式的理解大概就这些了,这都是自己的理解,有很多不足和不正确的地方,希望发现的小伙伴们给我提意见,我好加以改正和进步。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: