工厂方法模式: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
具体实现方式如下:
1. 建立一个 Animal 抽象类 ,该类有一个 shout() 方法,打印出 调用shout 方法的对象类。
为什么要建立一个Animal抽象类?
答: 声明为抽象的作用就是为了表示 Animal 是不能实例化的,要实例化就去实例化猫狗之类的具体动物。
为什么非要一个Animal 抽象类,而不直接写一个 Bear 类,并让Bear 类包含 shout () 方法?
答: 这是为了后面实例化某种动物时使用多态,也就是说虽然声明了 Animal ,但只要我指定了用Bear 工厂创建 Bear 对象,那 么就返回一个Bear 对象。
并且父类中声明了一个 shout () 方法,那么所有子类想实现同样功能时,就不要重新写一个相同的方法。这样也减少了代 码的重复性
上一篇博客中的Animal 类也应该修改成 abstract
2. 建立一个 Bear 类,该类继承了 Animal 。
3. 建立一个 Cat 类,该类继承了 Animal。
4. 建立工厂接口IAnimalFactory,该接口有一个创建动物 的方法 : createAnimal();
为什么直接使用 BearFactory 工厂来创建 Bear 对象,而需要使用一个 动物工厂接口?
答: 使用接口的好处有隐藏实现,利于多态,减少代码耦合性等等
在这里,使用接口可以看到的好处是在测试类中,如果我想生成一个Cat 对象,那么就将BearFactory 改成 CatFactory,其他地 方的代码不用改。 当然在这个修改的过程中就体现出工厂方法的特点: 让动物工厂类来决定这个动物工厂该生产那种动物,并且生 产这种动物的过程也是在动物工厂类中完成的。
5. 如果需要一个生产 Bear 类的工厂, 则新建一个 BearFactory 类,该类实现了 IAnimalFactory,并必须实现createAnimal ()方法,重写后的createAnimal() 方法返回一个 Bear 类的实例
6.如果需要一个生产 Cat 类的工厂, 则新建一个 CatFactory 类,该类实现了 IAnimalFactory,并必须实现createAnimal ()方法,重写后的createAnimal() 方法返回一个 Bear 类的实例
7. 建立一个TestFactoryMethod 类,该类用来检验工厂方法代码的正确性。
8. 结果验证
在这里就讨论下简单工厂模式和工厂方法模式的异同点:
最重要的相同点 : 都是用了多态技术,声明了一个 Animal 父类, 工厂返回的是 Cat/Bear 等子类
不同之处 : 简单工厂在一个工厂中可以制造多中 子类, 而工厂方法则是某一个具体的工厂只能创建某一种子类,也就是子类决定实例化 哪一个类。
如果在简单工厂中需要增加创建Tigger 类,那么必须在 AnimalFactory 类的 Switch 语句中再增加一个
case 't' : animal = new Tigger();
这样就严重违反了软件重构的一个重要原则: 添加功能时,尽量避免在原来的代码上改,而应该通过继承或实现接口的方式来 扩展原有功能。而工厂方法正好符合了这一点,只需要新建一个 Tigger 类 和 新建一个TiggerFactory 来实现 IAnimalFactory 接口,并重写createAnimal() 方法使其返回 Tigger 对象。
分享到:
相关推荐
定义: 结构说明: 相关概念: 接口: 接口与抽象类的区别: 面向接口编程: 功能: 时序图: 优缺点: 代码阐释:
2) 设计模式包含了大量的编程思想,讲授和真正掌握并不容易,网上的设计模式课程不少,大多讲解的比较晦涩,没有真实的应用场景和框架源码支撑,学习后,只知其形,不知其神。就会造成这样结果: 知道各种设计模式,...
普科国际软件一个学院的学习笔记,有3个文件word文档,文本,还有factory-demo源文件代码
设计模式学习笔记,此项目参考《大话设计模式》,只能作为入门级设计模式学习 设计原则 职责单一原则 开放-封闭原则 依赖倒转原则 高层模块不依赖底层模块,两个模块都应该依赖抽象。抽象不依赖细节,细节依赖抽象。...
是我在学习设计模式时整理的,其中一些是我自己学习,很多来自网络.希望对模式有兴趣的朋友有帮助,我会很高兴.
23种经典设计模式的分析,针对Java写的,自己的一些感悟, 与大家分享
\contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...
1. 创建型模式:创建型模式关注对象的创建过程,包括简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式和单例模式。这些模式可以帮助我们更灵活地创建对象,避免直接使用new关键字来创建对象,降低...
内容详细记录了java面向对象的编程思想,java类集,IO编程以及JDBG,还有工厂设计等模式,相信会对java初学者有很大帮助
酒店管理客房系统Java源码 创建型模式:关注对象的创建过程 :保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 ...抽象工厂模式是工厂模式的一种升级版本。 :分离了对象子组件的单独构造(由Builder来负
参考书籍(推荐): 《Java设计模式 - 刘伟》 , 《图解设计模式 - [日]结城浩》 创建型模式 :check_mark:简单工厂模式( Simple Factor Pattern ) :memo: , :check_mark:工厂方法模式( Factory Method Pattern )...
Java Design Patterns 学习笔记 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
describe:设计模式学习笔记 逻辑结构图 代码结构图 设计模式简述 创建型模式,共五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式,共七种:适配器模式,装饰器模式,代理模式,...
工厂模式和单例模式(https://www.jb51.net/article/184230.htm)应该是设计模式中应用最多的模式了,工厂模式的定义:提供创建对象的接口(来自百度百科:http://baike.baidu.com/view/1306799.htm),意思就是根据...
Java并发编程 背景介绍 并发历史 必要性 进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 ...
学习笔记较长,如果想查看文章的目录,chrome浏览器可以配合简悦插件使用,或者下载到本地使用Typora打开。 :hot_beverage: Java基础 Java容器 Java并发 数据结构和算法 数据结构 树 图 算法 分治 动态规划 回溯 ...
031506_【第15章:Java反射机制】_工厂设计模式笔记.pdf 031601_【第16章:Annotation】_系统内建Annotation笔记.pdf 031602_【第16章:Annotation】_自定义Annotation笔记.pdf 031603_【第16章:Annotation】_反射...
java初学者的学习笔记,很详细。 目录 0 第一节 7月15日 2 一、 IT行业相关介绍 2 二、C、C++和Java语言的比较 2 三、 JDK基础介绍 2 四、 面向对象与面向过程的比较 2 五、 Java相关介绍 2 六、 Path和Classpath...