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

上篇学习了简单工厂模式,趁热打铁看一下工厂方法模式。


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


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


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


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


简单工厂模式:



工厂方法模式:




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


首先创建一个工厂接口:


<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>


    我对工厂方法模式的理解大概就这些了,这都是自己的理解,有很多不足和不正确的地方,希望发现的小伙伴们给我提意见,我好加以改正和进步。微笑




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值