`
jandroid
  • 浏览: 1954546 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

设计模式之Abstract Factory

 
阅读更多

前言:

最近在研究android的时候,发现该系统大量使用了设计模式的知识。说来惭愧,在此之前,我从来没见过C++代码中有如此多重继承的

使用方法,并曾一度认为是android故意搞这么复杂,想让我们看不明白。后来在用JAVA开发android的程序时候,发现JAVA的API大部分也是这么弄的,不过用了Implements罢了....反思之,一定是我弄错了。这时候想起了设计模式,买来一看,真的是非常经典啊,所以准备写点东西,权当是笔记好了。

(该书已经看过一遍了,这是第二遍,准备每个模式都仔细体会下,难免有天马行空的地方--毕竟这是我给自己做的总结)

abstract factory

学名抽象工厂。(设计模式是真正的面向对象,啥东西最终都会落实到对象上)。

简单场景,以前经常在linux和windows平台上开发网络程序,后来搞了一个类,叫NetServer,要支持跨平台。一般会咋做呢?NetServer会定于成一个纯虚类,里边全是一些虚函数(把它当做java的接口类好了,java确实更靠近OO)。比如说CreateListener,Connect等。然后在windows平台上写了一个实现类叫WinNetServer,在Linux平台上写了一个LinuxNetServer。那么在何种情况下使用呢?在NetServer.h中,提供了一个ConstructNetServer函数(不是类的成员),然后分别在WinNetServer.CPP和LinuxNetServer.CPP中实现这个函数(也可以在别的一个地方实现)。利用#ifdef WIN32等来new WinNetServer或者new LinuxNetServer。

这就是一个极其简单的抽象工厂类。

但是,从书上感觉,该类对应的情况可以更广泛。

1 在NetServer内部可以创建一系列的东西,比如CreateTCPSocket,CreateUDPSocket。这是该工厂生产的两类产品。通过工厂类,我能保证在一个程序中,所有相关的东西全是一个工厂里边生产出来的(例如都是win平台,或者linux平台下的)

2 使用者根本不需要知道到底下面真实用的是哪个具体类(这似乎是所有设计模式要做到的事情)

优缺点:

这里通过看书和仔细分析,解释下几个特点(书上有时候只有短短一句话,但却意义深刻)

1 工厂类有个极大的问题。例如,如果以后增加了CreateHTTP的函数,那么在所有类(基类和子类)都需要添加这个函数,即使这个函数生产出来的东西只是有个很小的变化----看来,如果基类开始不确定定义好的话,后续会有较大的改动。而且更深层次的意思是,如果要创建哪怕只有tcpsocket和其他不同的东西,都需要重新定义一个子类(意思是2个子类中,只有tcpsocket创建不一样,其他都一样,就这么简单的不同,都会需要重新定义一个子类)。--这个问题的解决办法可以通过prototype模式

2 一个工厂,每个产品都需要定义一个创建函数

如 NetServerFactory(抽象工厂)--->创建NetServer(具体工厂)---->创建CreateTCPSocket(具体产品)。多个产品有多个这样的create函数(又被称为工厂函数),太麻烦了,不如Create(enum socketType)来解决....

3 按照上面的例子,NetServer是虚工厂,那实际工厂什么时候创建?这个应该是要么写死,要么条件编译,要么根据配置来产生。刚才那个ConstructNetServer实际是用来创建虚工厂的。

4 其实也可以这么做,在别的函数参数中,传递这个虚工厂接口(已经被实例化了的),然后调用虚工厂的方法来Create这个,Create那个。(这句是废话...呵呵)。

5 再想想还有什么特点呢?在UI方面似乎更容易些。有一个适用场景很重要,即工厂的产品应该有共同的基类。

(越来越深奥了,是的,工厂的create函数返回的结果应该是一个接口,然后在不同的平台下,该接口有不同实现---和bridge模式由啥区别?以后再说。这个特点很关键。)--bridge模式解决的是没有共同基类的情况。

分享到:
评论

相关推荐

    设计模式之Abstract Factory模式和代码实现

    在设计模式中,Abstract Factory模式是一种用来解决在不指定具体实现的情况下创建一系列相关或相互依赖对象的模式。在本文的上下文中,我们看到它被应用于一个奇幻RPG游戏的角色种族设计,每个种族(如人类、精灵)...

    C#设计模式之AbstractFactory

    "Abstract Factory"模式是其中一种,它属于创建型设计模式,旨在提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在这个模式中,抽象工厂类定义了一组创建产品的方法,这些方法都是抽象的,由...

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    Java设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。

    对设计模式—Abstract Factory模式的认识

    其中,Abstract Factory模式是23种GoF(Gang of Four)设计模式之一,它提供了一种创建一组相关或相互依赖对象的接口,而无需指定它们具体的类。 #### Abstract Factory模式的核心概念 Abstract Factory模式的核心...

    C++设计模式课件9_Abstract Factory_抽象工厂.pdf

    ### C++设计模式之Abstract Factory(抽象工厂) #### 概述 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种接口用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。本篇...

    设计模式C++学习之抽象工厂模式(AbstractFactory)

    抽象工厂模式是设计模式中的一种结构型模式,它在C++编程中有着广泛的应用。这个模式主要用于创建一系列相关的对象,而无需指定它们的具体类。在本文中,我们将深入探讨抽象工厂模式的概念、工作原理以及在C++中的...

    创建型模式之抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...

    设计模式 创建型模式 Abstract Factory模式(抽象工厂)

    Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...

    设计模式之Factory

    本篇文章将详细探讨"设计模式之Factory",它是一种非常基础且重要的创建型设计模式。 Factory模式的核心思想是提供一个接口或者抽象类,用于创建某一类对象,但允许其子类决定实例化哪一个类。这种模式使得创建过程...

    设计模式 t03AbstractFactory

    在"设计模式 t03AbstractFactory"中,我们主要探讨的是如何利用抽象工厂模式来构建跨平台或不同环境下的对象。抽象工厂通常包含一个抽象工厂接口,该接口定义了一系列用于创建产品对象的方法。然后,为每个具体环境...

    走进设计模式之抽象工厂(Abstract Factory)

    总之,"走进设计模式之抽象工厂"这篇博客深入探讨了抽象工厂模式的原理、实现方式、应用场景及其优缺点,旨在帮助读者理解并有效地运用这一设计模式。通过阅读博客和分析提供的代码示例,开发者可以更好地掌握抽象...

    创建型-抽象工厂模式(Abstract Factory)

    此外,抽象工厂模式还可以与其他设计模式结合使用,比如工厂方法模式(Factory Method Pattern),在某些情况下,可以将抽象工厂模式的抽象工厂类设计为工厂方法模式,让子类决定实例化哪一个类。同时,抽象工厂模式...

    设计模式 之 “抽象工厂模式[Abstract Factory Pattern]”

    **抽象工厂模式(Abstract Factory Pattern)**是一种创建型设计模式,它提供了一种创建对象族的接口,而无需指定它们的具体类。这种模式是当一个系统需要根据不同的平台或者环境来创建一组相关或相互依赖的对象时,...

    AbstractFactory案例代码

    在软件设计领域,设计模式是一种被广泛接受的解决常见问题的最佳实践。抽象工厂(Abstract Factory)模式是其中一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而无需指定它们的具体类。这个...

    C#设计模式之抽象工厂(abstract factory)模式示例源代码

    ### C#设计模式之抽象工厂(Abstract Factory)模式详解 #### 概述 抽象工厂模式(Abstract Factory Pattern)是创建型设计模式的一种,它提供了一个接口用于创建一系列相关的或相互依赖的对象,而无需指定它们具体的...

    抽象工厂模式(AbstractFactory)源代码

    设计模式抽象工厂模式(AbstractFactory)源代码

    [创建型模式] 设计模式之抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式的关键在于抽象工厂,它定义了一组创建对象的接口,允许子类决定实例化哪一个类。...

    设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)

    设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)

    AbstractFactory设计模式源码

    抽象工厂(Abstract Factory)设计模式是一种创建型设计模式,它提供了一种创建对象族的接口,而无需指定它们的具体类。这种模式适用于当系统需要创建一组相关或相互依赖的对象,而这些对象的具体类在运行时可能未知...

    设计模式之-抽象工厂-AbstractFactory

    抽象工厂(Abstract Factory)设计模式是软件工程中一种重要的创建型设计模式,它提供了一种创建对象组的方式,这些对象属于同一族系并且彼此相关。这个模式的主要目标是定义一个接口,用于创建一族相关或相互依赖的...

Global site tag (gtag.js) - Google Analytics