抽象工厂模式

理解了工厂方法模式,其实抽象工厂和工厂方法模式有很多的相似之处。抽象工厂同样是分离客户端对象的创建和逻辑代码的,但是抽象工厂往往是产生一组数据而不单单是产生一个产品。

抽象工厂提供一个创建一系列相关或相互依赖对象接口,而无需制定它们具体的类。

抽象工厂与工厂方法

抽象工厂

通过对象组合创建抽象产品

创建多系列产品

必须修改父类的接口才能支持新的产品

工厂方法

通过类继承创建抽象产品

创建一种产品

子泪花创建者并重载工厂方法以创建新产品

Demo

比较多就不一一的贴代码了,截类图

客户端代码:

#import <Foundation/Foundation.h>
#import "Factory.h"
#import "ProductType1.h"
#import "ProductType2.h"
#import "ConcreteFactory1.h"
#import "ConcreteFactory2.h"
int main(int argc, const char * argv[]) {
@autoreleasepool { Factory *factory = [ConcreteFactory1 new];
ProductType1 *pt1 = [factory createProductType1];
ProductType2 *pt2 = [factory createProductType2]; NSLog(@"%@\n%@",pt1.name,pt2.name); Factory *factory2 = [ConcreteFactory2 new];
ProductType1 *pt11 = [factory2 createProductType1];
ProductType2 *pt12 = [factory2 createProductType2]; NSLog(@"%@\n%@",pt11.name,pt12.name);
}
return ;
}

运行结果

-- ::04.277 Abstract Factory[:] productType1Fa
productType2Fa
-- ::04.278 Abstract Factory[:] productType1Fb
productType2Fb

可以看到,每个工厂产生的是一组产品。

也能够很明显的看到抽象工厂的缺点,每当我们需要添加新的产品的时候,需要添加产品对应的类,还需要修改每一个工厂为其添加创建方法。

Objective-C设计模式——抽象工厂模式Abstract Factory(对象创建)的更多相关文章

  1. 设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释

    抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2709 ...

  2. 大话设计模式--抽象工厂模式 Abstract Factory -- C++实现实例

    1. 抽象工厂模式: 提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类. 下面是工厂方法模式: 下面是抽象工厂模式: 和工厂方法模式相比 抽象工厂模式可以有多个Product抽象, ...

  3. C#设计模式——抽象工厂模式(Abstract Factory Pattern)

    一.概述在软件开发中,常常会需要创建一系列相互依赖的对象,同时,由于需求的变化,往往存在较多系列对象的创建工作.如果采用常规的创建方法(new),会造成客户程序和对象创建工作的紧耦合.对此,抽象工厂模 ...

  4. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...

  5. 【设计模式】抽象工厂模式 Abstract Factory Pattern

    简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...

  6. .NET设计模式(2):1.2 抽象工厂模式(Abstract Factory)

    概述 抽象工厂模式(Abstract Factory)是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口 ...

  7. 二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式(Abstract Factory Pattern) 介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例有Message和MessageModel,Messag ...

  8. 【UE4 设计模式】抽象工厂模式 Abstract Factory Pattern

    概述 描述 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类:具体的工厂负责实现具体的产品实例 抽象工厂中每个工厂可以创建多种产品(如苹果公司生产iPhone.iPad): 工厂方法 ...

  9. 抽象工厂模式(Abstract Factory)C#实例

    抽象工厂模式(Abstract Factory)C#实例 本文出处http://www.dofactory.com/net/abstract-factory-design-pattern 一.场景描述 ...

随机推荐

  1. Codeforces Round #311 (Div. 2) C. Arthur and Table Multiset

    C. Arthur and Table Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/557/p ...

  2. jq实现地址级联效果

    (function ($) { $.fn.Address = function (options) { var defaults = { divid: "Address", cal ...

  3. 配置apache虚拟主机的实例总结

    如何实现apache虚拟主机配置. 1.基于ip地址的虚拟主机Listen 80<VirtualHost 172.20.30.40> DocumentRoot /home/httpd/ht ...

  4. QT核心编程之Qt线程 (c)

    QT核心编程之Qt线程是本节要介绍的内容,QT核心编程我们要分几个部分来介绍,想参考更多内容,请看末尾的编辑推荐进行详细阅读,先来看本篇内容. Qt对线程提供了支持,它引入了一些基本与平台无关的线程类 ...

  5. C++ Qt 访问权限总结

    总结:C++的访问修饰符的作用是以类为单位,而不是以对象为单位. 通俗的讲,同类的对象间可以“互相访问”对方的数据成员,只不过访问途径不是直接访问. 步骤是:通过一个对象调用其public成员函数,此 ...

  6. QThread与QWidget使用

    本文主要内容: 在任务一中,用 四 种方式实现:点击界面按钮,开线程运行一段程序,结果显示在一个Label上.1. 用不正确的方式得到看似正确的结果2. 用Qt Manual 和 例子中使用的方法3. ...

  7. demo virdata 虚拟数据

    $pageCurr = I('p',1);        $start = ($pageCurr-1) * self::PAGE_RECORD_SCAN;        $sort  = I('sor ...

  8. LeetCode41 First Missing Positive

    题目: Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2 ...

  9. GridView格式化

    <asp:TemplateColumn HeaderText="进出境运输方式">    <ItemTemplate> <%# Eval(" ...

  10. (转)乐观的并发策略——基于CAS的自旋

    悲观者与乐观者的做事方式完全不一样,悲观者的人生观是一件事情我必须要百分之百完全控制才会去做,否则就认为这件事情一定会出问题:而乐观者的人生观则相反,凡事不管最终结果如何,他都会先尝试去做,大不了最后 ...