本节课程概览
学习抽象工厂模式
一:初识抽象工厂模式
包括:定义、结构、参考实现
二:体会抽象工厂模式
包括:场景问题、不用模式的解决方案、使用模式的解决方案
三:理解抽象工厂模式
包括:认识抽象工厂模式、定义可扩展的工厂、
抽象工厂模式和DAO、抽象工厂模式的优缺点
四:思考抽象工厂模式
包括:抽象工厂模式的本质、何时选用
初识抽象工厂模式
定义
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
结构和说明
AbstractFactory:
抽象工厂,定义创建一系列产品对象的操作接口。
ConcreteFactory:
具体的工厂,实现抽象工厂定义的方法,具体实现一系列产品对象的创建。
AbstractProduct:
定义一类产品对象的接口。
ConcreteProduct:
具体的产品实现对象,通常在具体工厂里面,会选择具体的产品实现对象,来创建符合抽象工厂定义的方法返回的产品类型的对象。
Client:
客户端,主要使用抽象工厂来获取一系列所需要的产品对象,然后面向这些产品对象的接口编程,以实现需要的功能。
体会抽象工厂模式
选择组装电脑的配件
举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选择一系列的配件,比如:CPU、硬盘、内存、主板、电源、机箱等等。为了使讨论简单点,只考虑选择CPU和主板的问题。
对于装机工程师而言,他只知道组装一台电脑,需要相应的配件,但是具体使用什么样的配件,还得由客户说了算。也就是说装机工程师只是负责组装,而客户负责选择装配所需要的具体的配件。
问题
现在需要使用程序来把这个装机的过程,尤其是选择组装电脑配件的过程实现出来,该如何实现呢?
不用模式的解决方案
存在的问题
虽然上面的实现,通过简单工厂解决解决了:对于装机工程师,只知CPU和主板的接口,而不知道具体实现的问题。但还有一个问题没有解决,什么问题呢?那就是这些CPU对象和主板对象其实是有关系的,是需要相互匹配的。
n使用模式的解决方案
先来看看如何使用抽象工厂模式来解决前面提出的问题。
装机工程师要组装电脑对象,需要一系列的产品对象,比如CPU、主板等,于是创建一个抽象工厂给装机工程师使用,在这个抽象工厂里面定义抽象的创建CPU和主板的方法,这个抽象工厂就相当于一个抽象的装机方案,在这个装机方案里面,各个配件是能够相互匹配的。
每个装机的客户,会提出他们自己的具体装机方案,或者是选择已有的装机方案,相当于为抽象工厂提供了具体的子类,在这些具体的装机方案类里面,会创建具体的CPU和主板实现对象。
理解抽象工厂模式
认识抽象工厂模式
1:模式的功能
抽象工厂的功能是为一系列相关对象或相互依赖的对象创建一个接口。
从某种意义上看,抽象工厂其实是一个产品系列,或者是产品簇。
2:实现成接口
AbstractFactory在Java中通常实现成为接口,大家不要被名称误导了,以为是实现成为抽象类
3:使用工厂方法
AbstractFactory定义了创建产品所需要的接口,具体的实现是在实现类里面,通常在实现类里面就需要选择多种更具体的实现,所以AbstractFactory定义的创建产品的方法可以看成是工厂方法,而这些工厂方法的具体实现就延迟到了具体的工厂里面。也就是说使用工厂方法来实现抽象工厂。
4:切换产品簇
抽象工厂定义了一个产品簇,因此切换产品簇的时候提供不同的抽象工厂就好了
定义可扩展的工厂
在前面的示例中,抽象工厂为每一种它能创建的产品对象都定义了相应的方法,比如创建CPU的方法和创建主板的方法等。
这种实现有一个麻烦,就是如果在产品簇中要新增加一种产品,比如现在要求抽象工厂除了能够创建CPU和主板外,还要能够创建内存对象,那么就需要在抽象工厂里面添加创建内存的这么一个方法。当抽象工厂一发生变化,所有的具体工厂实现都要发生变化,这非常的不灵活。
现在有一种相对灵活,但是不太安全的改进方式来解决这个问题,思路如下: 抽象工厂里面不需要定义那么多方法,定义一个方法就可以了,给这个方法设置一 个参数,通过这个参数来判断具体创建什么产品对象;由于只有一个方法,在返回类型上就不能是具体的某个产品类型了,只能是所有的产品对象都继承或者实现的这么一个类型,比如让所有的产品都实现某个接口,或者干脆使用Object类型。
抽象工厂和DAO
一:DAO知识回顾
1:DAO:数据访问对象,是Data Access Object首字母的简写
2:DAO是JEE(也称JavaEE,原J2EE)中的一个标准模式,通过它来解决访问数据对象所面临的一系列问题,比如:数据源不同、存储类型不同、访问方式不同、供应商不同、版本不同等等,这些不同会造成访问数据的实现上差别很大。
3:使用DAO的系统结构图
4:DAO需要抽象和封装所有对数据的访问,DAO承担和数据仓库交互的职责,这也意味着,访问数据所面临的所有问题,都需要DAO在内部来自行解决
DAO和抽象工厂的关系
在实现DAO模式的时候,最常见的实现策略就是使用工厂的策略,而且多是通过抽象工厂模式来实现,当然在使用抽象工厂模式来实现的时候,可以结合工厂方法模式。因此DAO模式和抽象工厂模式有很大的联系。
DAO模式采用工厂方法模式来实现的策略
抽象工厂模式的优缺点
1:分离接口和实现
2:使得切换产品簇变得容易
3:不太容易扩展新的产品
4:容易造成类层次复杂
思考抽象工厂模式
抽象工厂模式的本质
抽象工厂模式的本质是: 选择产品簇的实现
何时选用抽象工厂模式
1:如果希望一个系统独立于它的产品的创建,组合和表示的时候,换句话说,希望一个系统只是知道产品的接口,而不关心实现的时候
2:如果一个系统要由多个产品系列中的一个来配置的时候,换句话说,就是可以动态的切换产品簇的时候
3:如果要强调一系列相关产品的接口,以便联合使用它们的时候
分享到:
相关推荐
原型模式(Prototype Pattern)是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而无需知道具体创建过程的细节。这种模式的核心在于,它提供了一种对象克隆的简便方法,使得对象的创建过程对用户...
《研磨设计模式》实战是IT领域中关于软件设计的一份重要资料,它主要探讨了设计模式在实际项目中的应用。设计模式是软件工程中经过长期实践总结出的通用问题解决方案,是解决常见设计问题的经验总结。这份PPT可能是...
《设计模式——GFour》是一本深受IT从业者喜爱的经典书籍,尤其在C++开发者中具有广泛影响力。设计模式是软件工程领域中的一种最佳实践,它总结了在特定情境下解决问题的常见方法,使得代码可读性更强,复用性更高,...
设计模式是一种在软件设计中被广泛认可的解决特定问题、经过良好记录并可重用的解决方案。它们代表了在各种编程环境中反复出现的问题的最佳实践。原版的设计模式通常指的是最初由“Gang of Four”(GoF)在他们的...
《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...
Java设计模式——原型模式 原型模式Java设计模式——原型模式概念使用场景Java里的克隆代码理解prototype(原型)问题总结优缺点模型优点模型缺点 概念 原型模式是创建型模式的最后一种,讲到原型模式就不得不提到...
《研磨设计模式》这本书是陈臣和王斌两位作者合作的成果,专注于讲解软件设计中的模式应用。设计模式是软件工程中的一种最佳实践,它总结了在特定上下文中解决问题的常见方法,使得开发者可以复用这些解决方案,提高...
本文将深入探讨一种常见的设计模式——原型模式(Prototype Pattern),并结合具体的iOS应用场景进行解析。 原型模式是一种创建型设计模式,它的主要思想是通过复制已有对象来创建新对象,而不是通过构造函数来创建...
**原型模式(Prototype Pattern)**是软件设计模式中的结构型模式之一,主要用来简化实例化过程,减少类的创建。在原型模式中,一个对象可以被用作创建其他新对象的模板,通过复制已有对象来创建新对象,而不是通过new...
"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...
研磨设计模式是一本深入探讨软件设计原则与实践的书籍,其讲课PPT为我们提供了丰富的设计模式知识。设计模式是软件工程中经过实践验证的、解决常见问题的模板,是经验丰富的开发人员智慧的结晶。这些模式可以帮助...
大作业开发的单页面应用,Axure原型校车综合管理系统,内含邮箱、表格、用户登录等交互。
《研磨设计模式》这本书是软件开发领域中的经典之作,主要关注的是面向对象设计中的设计模式。设计模式是在特定上下文中解决常见问题的最佳实践,它为开发者提供了在类似情况下重复使用解决方案的模板,有助于提高...
这个“研磨设计模式博文集”显然是一份深入探讨设计模式的资料集合,其中可能包含了对多种设计模式的详细解析、示例代码以及实际应用中的经验分享。在软件开发中,设计模式能够帮助开发者提高代码质量、可读性和可...
### 设计模式与泡MM——设计模式入门教程 #### 一、创建型模式 ##### 1、FACTORY(工厂模式) 工厂模式的核心在于定义了一个创建对象的接口,但允许子类决定实例化哪一个类。工厂模式让类的实例化延迟到子类中...
本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...
Axure 微信高保真原型图——键盘输入是微信登录验证码登录系列的一部分,本文将详细讲解模拟键盘输入的实现过程。 一、交互原理讲解 1. 输入讲解:通过 Axure,点击字母按钮时,文本框获取到对应的字母,并将其...