我与大话设计模式之代码篇(二)----工厂方法模式
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>
我对工厂方法模式的理解大概就这些了,这都是自己的理解,有很多不足和不正确的地方,希望发现的小伙伴们给我提意见,我好加以改正和进步。
相关文章推荐
- C#类修饰符
- PHP语法小结之基础和变量
- 谷歌浏览器拦截窗口(以及url解析分别在php和js中)
- 【Eclipse_部署web项目篇】修改eclipse默认指向的WebContent目录作为启动运行加载
- learn go error
- 解析Qt的信号-槽机制是如何工作的 - How Qt Signals and Slots Work
- Java 中如何实现(类似于C#中的OUT)的输出类型参数
- C语言二叉树的层序遍历
- leveldb源码--PosixEnv代码分享
- Java中的String为什么是不可变的?
- ThinkPHP学习-2
- C++ 学习(虚基类)
- php的延迟静态绑定
- 源代码管理和git 使用
- YII 路径总结
- 在C++中使用golang的协程
- ThinkPHP学习-1
- java.lang.String的 split方法用法总结
- S折交叉验证 in Python
- java 获取网页指定内容