`

抽象工厂模式——研磨设计模式——跟着cc学设计系列

 
阅读更多

本节课程概览
学习抽象工厂模式
一:初识抽象工厂模式
包括:定义、结构、参考实现
二:体会抽象工厂模式
包括:场景问题、不用模式的解决方案、使用模式的解决方案
三:理解抽象工厂模式
包括:认识抽象工厂模式、定义可扩展的工厂、
抽象工厂模式和DAO、抽象工厂模式的优缺点
四:思考抽象工厂模式
包括:抽象工厂模式的本质、何时选用
 
初识抽象工厂模式
定义
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
结构和说明
AbstractFactory:
抽象工厂,定义创建一系列产品对象的操作接口。
ConcreteFactory:
具体的工厂,实现抽象工厂定义的方法,具体实现一系列产品对象的创建。
AbstractProduct:
定义一类产品对象的接口。
ConcreteProduct:
具体的产品实现对象,通常在具体工厂里面,会选择具体的产品实现对象,来创建符合抽象工厂定义的方法返回的产品类型的对象。
Client:
客户端,主要使用抽象工厂来获取一系列所需要的产品对象,然后面向这些产品对象的接口编程,以实现需要的功能。
体会抽象工厂模式
选择组装电脑的配件
举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选择一系列的配件,比如:CPU、硬盘、内存、主板、电源、机箱等等。为了使讨论简单点,只考虑选择CPU和主板的问题。
对于装机工程师而言,他只知道组装一台电脑,需要相应的配件,但是具体使用什么样的配件,还得由客户说了算。也就是说装机工程师只是负责组装,而客户负责选择装配所需要的具体的配件。
 
问题
现在需要使用程序来把这个装机的过程,尤其是选择组装电脑配件的过程实现出来,该如何实现呢?
 
不用模式的解决方案
存在的问题
虽然上面的实现,通过简单工厂解决解决了:对于装机工程师,只知CPU和主板的接口,而不知道具体实现的问题。但还有一个问题没有解决,什么问题呢?那就是这些CPU对象和主板对象其实是有关系的,是需要相互匹配的。
n使用模式的解决方案
先来看看如何使用抽象工厂模式来解决前面提出的问题。
装机工程师要组装电脑对象,需要一系列的产品对象,比如CPU、主板等,于是创建一个抽象工厂给装机工程师使用,在这个抽象工厂里面定义抽象的创建CPU和主板的方法,这个抽象工厂就相当于一个抽象的装机方案,在这个装机方案里面,各个配件是能够相互匹配的。
每个装机的客户,会提出他们自己的具体装机方案,或者是选择已有的装机方案,相当于为抽象工厂提供了具体的子类,在这些具体的装机方案类里面,会创建具体的CPU和主板实现对象。
 
使用模式的解决方案的结构图
理解抽象工厂模式
认识抽象工厂模式
1:模式的功能
抽象工厂的功能是为一系列相关对象或相互依赖的对象创建一个接口。
从某种意义上看,抽象工厂其实是一个产品系列,或者是产品簇。
2:实现成接口
AbstractFactory在Java中通常实现成为接口,大家不要被名称误导了,以为是实现成为抽象类
3:使用工厂方法
AbstractFactory定义了创建产品所需要的接口,具体的实现是在实现类里面,通常在实现类里面就需要选择多种更具体的实现,所以AbstractFactory定义的创建产品的方法可以看成是工厂方法,而这些工厂方法的具体实现就延迟到了具体的工厂里面。也就是说使用工厂方法来实现抽象工厂。
4:切换产品簇
抽象工厂定义了一个产品簇,因此切换产品簇的时候提供不同的抽象工厂就好了
5:抽象工厂模式的调用顺序示意图
 
 
定义可扩展的工厂
在前面的示例中,抽象工厂为每一种它能创建的产品对象都定义了相应的方法,比如创建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模式采用工厂方法模式来实现的策略
  
 
DAO模式采用抽象工厂模式来实现的策略 
抽象工厂模式的优缺点  
1:分离接口和实现
2:使得切换产品簇变得容易
3:不太容易扩展新的产品
4:容易造成类层次复杂
思考抽象工厂模式
抽象工厂模式的本质  
抽象工厂模式的本质是: 选择产品簇的实现
 
何时选用抽象工厂模式  
1:如果希望一个系统独立于它的产品的创建,组合和表示的时候,换句话说,希望一个系统只是知道产品的接口,而不关心实现的时候
2:如果一个系统要由多个产品系列中的一个来配置的时候,换句话说,就是可以动态的切换产品簇的时候
3:如果要强调一系列相关产品的接口,以便联合使用它们的时候
 

私塾在线学习网原创内容,转载请注明【 http://sishuok.com/forum/blogPost/list/0/5681.html
3
8
分享到:
评论

相关推荐

    设计模式——抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体类。这种模式的主要目的是为了隔离产品对象的创建和使用,使得系统对产品类的依赖降低到最低,同时也方便了产品的扩展和...

    c#工厂模式——简单工厂,抽象工厂,单件模式实例

    抽象工厂模式适用于需要创建一系列相关对象,且未来可能需要切换到不同系列的情况;单例模式则适用于那些需要全局共享且只有一个实例的类。 在实际项目中,这些模式可以组合使用以满足复杂的需求。例如,一个系统...

    c#工厂模式——简单工厂_抽象工厂实例

    ### C#工厂模式详解——简单工厂与抽象工厂实例解析 #### 一、工厂模式概述 工厂模式是一种常用的设计模式,在面向对象编程中被广泛应用于创建对象。它通过提供一个统一的接口来创建一系列相关的或相互依赖的对象...

    软件设计模式——抽象工厂

    抽象工厂模式是一种重要的软件设计模式,它属于创建型模式,主要解决的是当系统需要创建一系列相关或相互依赖的对象时,而这些对象的类在运行时可能不确定的问题。在这个模式中,我们通过一个抽象工厂接口来定义创建...

    Android之大话设计模式——:抽象工厂模式借鉴.pdf

    Android之大话设计模式——:抽象工厂模式借鉴.pdf

    设计模式实现——抽象工厂模式结构实现

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许客户端使用一个通用接口来创建一组相关或相互依赖的对象,而无需关心它们的具体实现。在Java或其他...

    设计模式-抽象工厂模式(讲解及其实现代码)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...

    抽象工厂设计模式抽象工厂设计模式

    抽象工厂设计模式抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式

    抽象工厂模式+工厂方法模式+策略模式+类图实现手机加工厂

    本文将探讨三个重要的设计模式:抽象工厂模式、工厂方法模式以及策略模式,并结合一个实际的场景——手机加工厂,来具体阐述它们的应用。 首先,我们来看**抽象工厂模式**。这个模式主要用于创建相关或依赖对象的...

    Android之大话设计模式——:抽象工厂模式参考.pdf

    Android之大话设计模式——:抽象工厂模式参考.pdf

    格斗类游戏软件——抽象工厂模式

    抽象工厂模式是一种设计模式,属于创建型模式,它提供了一种创建对象集合的方式,这些对象来自相关联的产品家族,而且每个对象都属于不同的抽象产品类。在“格斗类游戏软件”的场景中,这个模式可以帮助我们根据玩家...

    设计模式--抽象工厂模式实现多数据库连接

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建对象族的接口,而无需指定它们的具体类。在.NET开发中,这种模式常用于实现多数据库连接,比如连接到MySQL、SQL Server或Oracle等不同的数据库系统。...

    简单工厂模式-工厂方法模式-抽象工厂模式

    在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...

    IOS 设计模式抽象工厂实例Demo

    抽象工厂模式是设计模式中的一种,尤其适用于创建一组相关或相互依赖的对象。这个实例Demo将向我们展示如何在iOS环境中应用抽象工厂模式。 抽象工厂模式的核心思想是提供一个接口,用于创建一系列相关或相互依赖的...

    抽象工厂模式uml类图

    java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式

    抽象工厂模式+反射技术(抽象工厂模式+简单工厂模式)

    抽象工厂模式是设计模式中的一种,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在软件工程中,当系统需要在运行时选择不同的产品族时,或者想要隔离具体产品的实现细节时,抽象工厂...

    设计模式 抽象工厂模式 反射 配置文件

    设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂...

    设计模式 - 抽象工厂模式

    设计模式 - 抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际...

    NET设计模式之抽象工厂模式[归纳].pdf

    抽象工厂模式是设计模式中的一种,属于创建型模式,它的主要目的是为了解决在软件系统中,面对一系列相互依赖的对象的创建问题。这种模式提供了一个创建一系列相关或相互依赖对象的接口,而不必指定它们的具体类。...

    深入浅出设计模式四——多区域比萨加盟店生产比萨实现(抽象工厂模式)

    今天我们将深入探讨“抽象工厂模式”(Abstract Factory Pattern),它在“深入浅出设计模式四——多区域比萨加盟店生产比萨实现”中得到了应用。这个模式主要用于创建一系列相关的对象,而无需指定其具体的类。 ...

Global site tag (gtag.js) - Google Analytics