`

工厂方法模式——研磨设计模式——跟着cc学设计系列

 
阅读更多

本节课程概览
学习工厂方法模式
一:初识工厂方法模式
包括:定义、结构、参考实现
二:体会工厂方法模式
包括:场景问题、不用模式的解决方案、使用模式的解决方案
三:理解工厂方法模式
包括:认识工厂方法模式、工厂方法模式与IoC/DI、
              平行的类层次结构、参数化工厂方法、
      工厂方法模式的优缺点
四:思考工厂方法模式
包括:工厂方法模式的本质、对设计原则的体现、何时选用
初识工厂方法模式
定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到其子类。
结构和说明
Product:定义工厂方法所创建的对象的接口,也就是实际需要使用的对象的接口
ConcreteProduct:具体的Product接口的实现对象。
Creator:创建器,声明工厂方法
ConcreteCreator:具体的创建器对象,覆盖实现Creator定义的工厂方法,返回具体的Product实例
 
体会工厂方法模式
导出数据的应用框架
考虑这样一个实际应用:实现一个导出数据的应用框架,来让客户选择数据的导出方式,并真正执行数据导出。
通常这种系统,在导出数据上,会有一些约定的方式,比如导出成:文本格式、数据库备份形式、Excel格式、Xml格式等等。
不用模式的解决方案
直接参看代码示例
 
存在的问题
对于实现导出数据的业务功能对象,它需要创建ExportFileApi的具体实例对象,但是它只知道ExportFileApi接口,而不知道其具体的实现。那该怎么办呢?
 
使用模式的解决方案
直接参看代码示例
 
理解工厂方法模式
认识工厂方法模式
1:工厂方法模式的功能
工厂方法的主要功能是让父类在不知道具体实现的情况下,完成自身的功能调用,而具体的实现延迟到子类来实现。
2:实现成抽象类
工厂方法的实现中,通常父类会是一个抽象类,里面包含创建所需对象的抽象方法,这些抽象方法就是工厂方法
3:实现成具体的类
也可以把父类实现成为一个具体的类,这种情况下,通常是在父类中提供获取所需对象的默认实现方法,这样就算没有具体的子类,也能够运行 。
4:工厂方法的参数和返回值
工厂方法的实现中,可能需要参数,以便决定到底选用哪一种具体的实现。
一般工厂方法返回的是被创建对象的接口对象,当然也可以是抽象类或者一个具体的类的实例。
5:谁来使用工厂方法创建的对象
(1)在工厂方法模式里面,应该是Creator中的其它方法在使用工厂方法创建的对象
(2)客户端应该是使用Creator对象,或者是使用由Creator创建出来的对象,这个时候工厂方法创建的对象,是Creator中的某些方法使用。
(3)在某些情况下,客户端可能会使用由Creator创建出来的对象,这个时候工厂方法创建的对象,是构成客户端需要的对象的一部分。
 
小结一下:在工厂方法模式里面,客户端要么使用Creator对象,要么使用Creator创建的对象,一般客户端不直接使用工厂方法。当然也可以直接把工厂方法暴露给客户端操作,但是一般不这么做。  
工厂方法模式的调用顺序示意图
先看看客户端使用由Creator创建出来的对象情况的调用顺序示意图
  
 
接下来看看客户端使用Creator对象时候的调用顺序示意图
工厂方法模式与IoC/DI
1:概念
依赖注入:应用程序依赖容器创建并注入它所需要的外部资源
控制反转:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。
2:理解
(1)参与者都有谁?
(2)依赖:谁依赖于谁?为什么需要依赖?
(3)注入:谁注入于谁?到底注入什么?
(4)控制反转:谁控制谁?控制什么?为何叫反转(有反转就应该有正转了)?
(5)依赖注入和控制反转是同一概念吗?
3:过程
没有IoC/DI的时候,常规的A类使用C类的示意图
有了IoC/DI的容器后,A类不再主动去创建C了
而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中
 
4:思想
其实IoC/DI对编程带来的最大改变不是从代码上,而是从思想上,发生了 “主 从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC/DI容器来创建并注入它所需要的资源了。
这么小小的一个改变其实是编程思想的一个大进步,这样就有效的分离了对象和它所需要的外部资源,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
工厂方法模式和IoC/DI的关系
他们的思想很类似,都是“主动变被动”,进行“主从换位”,从而获得更灵活的程序结构
 
平行的类层次结构
(1)什么是平行的类层次结构呢?
简单点说,假如有两个类层次结构,其中一个类层次中的每个类在另一个类层次中都有一个对应的类的结构,就被称为平行的类层次结构。
  
 
(2)这种平行的类层次结构用来干什么呢?
主要用来把一个类层次中的某些行为分离出来,让类层次中的类把原本属于自己的职责,委托给分离出来的类去实现,从而使得类层次本身变得更简单,更容易扩展和复用。
(3)工厂方法模式跟平行的类层次结构有何关系呢?
可以使用工厂方法模式来连接平行的类层次。
 
看上面的示例图,在每个硬盘对象里面,都有一个工厂方法createHDOperate,通过这个工厂方法,客户端就可以获取一个跟硬盘对象相对应的行为对象。
参数化工厂方法
所谓参数化工厂方法指的就是:通过给工厂方法传递参数,让工厂方法根据参数的不同来创建不同的产品对象
 
(1)先看代码示例
(2)再体会一下,当需要扩展新的实现 ,使用参数化工厂方法,扩展起来会非常容易
 
工厂方法模式的优缺点
1:可以在不知具体实现的情况下编程
2:更容易扩展对象的新版本
3:连接平行的类层次
4:具体产品对象和工厂方法的耦合性
 
思考工厂方法模式
工厂方法模式的本质  
工厂方法模式的本质是: 延迟到子类来选择实现
对设计原则的体现
工厂方法模式很好的体现了“ 依赖倒置原则” 。
依赖倒置原则告诉我们“要依赖抽象,不要依赖于具体类”,简单点说就是:不能让高层组件依赖于低层组件,而且不管高层组件还是低层组件,都应该依赖于抽象。
何时选用工厂方法模式 
1:如果一个类需要创建某个接口的对象,但是又不知道具体的实现,这种情况可以选用工厂方法模式,把创建对象的工作延迟到子类去实现
2:如果一个类本身就希望,由它的子类来创建所需的对象的时候,应该使用工厂方法模式
 
配套视频课程:【   http://sishuok.com/product/501
私塾在线学习网原创内容,转载请注明【http://sishuok.com/forum/blogPost/list/5679.html
 
1
8
分享到:
评论

相关推荐

    研磨设计模式之工厂方法模式.

    《研磨设计模式之工厂方法模式》是一本深入解析Java设计模式的专业书籍,特别是对工厂方法模式进行了详尽的探讨。设计模式是软件工程中的一种最佳实践,它们是解决常见问题的经验总结,使得代码更加可读、可维护和可...

    研磨设计模式源码

    《研磨设计模式源码》是一份非常宝贵的资源,它提供了设计模式的实践代码,帮助开发者深入理解并应用这些模式。设计模式是软件工程中经过长期实践总结出来的一套通用解决方案,它们描述了在特定场景下如何解决常见...

    X-gen PPT下载——《研磨设计模式》 实战

    包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)...Strategy)、模板方法模式(Template Method)和访问者模式(Visitor)...

    研磨设计模式(完整带书签).part2.pdf

    第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 ...

    研磨设计模式带书签完整版228M.7z.001

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    研磨设计模式PDF

    模板方法模式(Template Method)在抽象类中定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 在《研磨设计模式》这本书中,作者通过丰富...

    设计模式学习心得(研磨设计模式)

    工厂方法模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。通过使用工厂方法,我们可以在不指定具体类的情况下,创建对象。这种模式使得系统更具扩展性,因为添加新的产品类型只需要创建新的工厂,而无需...

    研磨设计模式[书签]

    创建型模式主要关注对象的创建过程,如单例模式、工厂方法模式和抽象工厂模式等,它们能够在不同的情况下提供合适的对象创建方式,降低代码之间的耦合度。结构型模式关注如何组合类和对象以实现更复杂的设计,如...

    研磨设计模式之 工厂方法模式.doc

    研磨设计模式之 工厂方法模式.doc

    研磨设计模式-陈臣.epub

    “1.1 设计模式是什么 1.1.1 什么是模式 从字面上理解,模,就是模型、模板的意思;式,就是方式、方法的意思。综合起来,所谓模式就是:可以作为模型或模板的方式或方法。... “研磨设计模式”。 iBooks.

    研磨设计模式全部源代码

    8. 模板方法模式:模板方法定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它使得子类可以在不改变算法整体结构的情况下,重定义某些步骤。 9. 策略模式:策略模式定义了一系列算法,并将每个算法封装起来...

    研磨设计模式 完美书签 完整(一)

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    研磨设计模式 源代码

    《研磨设计模式》是一本深入探讨软件设计模式的经典书籍,源代码包含了书中所讲解的各种设计模式的实际应用示例。设计模式是软件工程中的重要概念,它们是经过反复验证、在特定情境下解决常见问题的有效解决方案。...

    研磨设计模式博文集

    1. **创建型模式**:这类模式主要关注对象的创建过程,如单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。它们提供了...

    研磨设计模式.rar

    行为型模式关注对象间的行为分配,如策略模式、观察者模式、访问者模式、责任链模式、命令模式、解释器模式、迭代器模式、备忘录模式、状态模式、模板方法模式和访问者模式,它们处理对象间的通信和行为。...

    研磨设计模式带书签完整版228M.7z.002

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    研磨设计模式讲课PPT

    14. **模板方法模式**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 15. **状态模式**:允许一个对象在其内部状态改变时改变它的行为...

    研磨设计模式视频课程PPT

    内容概述:本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制 课程目标:全面、系统的掌握GoF设计模式的知识,达到可以在实际项目开发中运用的能力 ...

    研磨设计模式高清完整版(1)

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    研磨设计模式--chjavach的博客文章

    本文将深入探讨五个关键的设计模式:单例模式、工厂方法模式、策略模式、命令模式和桥接模式,这些都是Java编程中常用且至关重要的设计原则。 首先,我们来看**单例模式**。单例模式确保一个类只有一个实例,并提供...

Global site tag (gtag.js) - Google Analytics