Objective-C 工厂模式(下) -- 抽象工厂模式

相比简单工厂模式, 只有一个工厂 能生产的手机也是固定的

抽象工厂模式类似于有很多家工厂, 当用户要买什么手机就创建对应的工厂去生产

比如用户要买iPhone就创建一个Apple工厂来生产手机, 要买Android手机就创建一个Goolge工厂

这样创建工厂, 工厂, 用户这样就是我们要考虑的因素 (其实还有手机, 这里就跳过不讲了跟简单工厂模式里面一样)

创建工厂要有一个管理对象, 来根据客户的需求自动创建相应的工厂

工厂只要负责生产手机就好了

现在来构建代码

先写一个基本工厂模型

BaseFactory.h

 1 #import <Foundation/Foundation.h>
 2
 3 @interface BaseFactory : NSObject
 4
 5 /**
 6  创建手机方法
 7
 8  @return 返回手机对象
 9  */
10 - (id)createPhone;
11
12 @end

BaseFactory.m

 1 #import "BaseFactory.h"
 2
 3 @implementation BaseFactory
 4
 5 - (id)createPhone {
 6
 7     //可以再添加代码禁止BaseFactory直接调用此方法
 8     //只允许子类调用
 9     return nil;
10 }
11
12 @end

来创建Apple工厂

AppleFactory.h

1 #import "BaseFactory.h"
2
3 @interface AppleFactory : BaseFactory
4
5 @end

AppleFactory.m

 1 #import "AppleFactory.h"
 2
 3 @implementation AppleFactory
 4
 5 - (id)createPhone {
 6
 7     NSLog(@"创建Apple手机");
 8     //这里应该是再给给工程添加手机模型, 创建并返回手机对象
 9     //现在只是举例 先不实现这部分
10     return nil;
11 }
12
13 @end

创建Google工厂

GoogleFactory.h

1 #import "BaseFactory.h"
2
3 @interface GoogleFactory : BaseFactory
4
5 @end

GoogleFactory.m

 1 #import "GoogleFactory.h"
 2
 3 @implementation GoogleFactory
 4
 5 - (id)createPhone {
 6
 7     NSLog(@"创建Google手机");
 8     //这里应该是再给给工程添加手机模型, 创建并返回手机对象
 9     //现在只是举例 先不实现这部分
10     return nil;
11 }
12
13 @end

下面是工厂管理者

FactoryManager.h负责根据用户需求创建工厂去生产

 1 #import <Foundation/Foundation.h>
 2 #import "AppleFactory.h"
 3 #import "GoogleFactory.h"
 4
 5 typedef enum : NSUInteger {
 6     kApple = 0x1,
 7     kGoogle,
 8 } EFactoryType;
 9
10 @interface FactoryManager : NSObject
11
12 /**
13  创建手机工厂
14
15  @param type 工厂类别
16  @return 返回工厂对象
17  */
18 + (id)createFactoryWithType:(EFactoryType)type;
19
20 @end

FactoryManager.m

 1 #import "FactoryManager.h"
 2
 3 @implementation FactoryManager
 4
 5 + (id)createFactoryWithType:(EFactoryType)type {
 6
 7     BaseFactory *factory;
 8     if (type == kApple) {
 9
10         factory = [[AppleFactory alloc] init];
11
12     } else if (type == kGoogle) {
13
14         factory = [[GoogleFactory alloc] init];
15
16     }
17
18     return factory;
19 }
20
21 @end

下面是实现

 1 #import "ViewController.h"
 2 #import "FactoryManager.h"
 3
 4 @interface ViewController ()
 5
 6 @end
 7
 8 @implementation ViewController
 9
10 - (void)viewDidLoad {
11
12     [super viewDidLoad];
13
14     //创建工厂
15     AppleFactory *factory = [FactoryManager createFactoryWithType:kApple];
16
17     //工厂生产手机
18     [factory createPhone];
19
20 }
21
22
23
24 @end

抽象工厂模式比简单工厂模式更加灵活

时间: 2024-10-05 09:18:57

Objective-C 工厂模式(下) -- 抽象工厂模式的相关文章

工厂模式总结(简单工厂,工厂方法,抽象工厂)

工厂模式属于创建型模式,大致可以分为三类,简单工厂模式.工厂方法模式.抽象工厂模式. 通过两个例子讲解这三种工厂模式 示例一 简单工厂模式 首先介绍简单工厂模式,它的主要特点是需要在工厂类中做判断,从而创造相应的产品.当增加新的产品时,就需要修改工厂类.有点抽象,举个例子就明白了.有一家生产处理器核的厂家,它只有一个工厂,能够生产两种型号的处理器核.客户需要什么样的处理器核,一定要显示地告诉生产工厂.下面给出一种实现方案. 1 enum CTYPE {COREA, COREB}; 2 class

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

简单工厂模式.抽象工厂模式.工厂方法模式,这三种工厂模式都属于设计模式中的创建型模式,它们在形式和特点上也多少有些相似,其最终目的都是帮我们将对象的实例化部分取出来,进而优化系统架构,增强系统的扩展性,也就是说更好的体现开放封闭原则. 简单工厂模式: 概念: 简单工厂模式是类的创建模式,又叫做静态工厂方法模式,是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例,涉及到工厂角色.抽象产品角色以及具体产品角色. 结构图: 分析: 一: 简单工厂类是整个模式的关键所在,包含了必要的逻辑判断,根据

工厂方法模式And抽象工厂模式

一.工厂方法模式 简单工厂模式的缺陷就是类的创建太过于依赖工厂,一旦需要进行程序扩展,就必须修改工厂类的代码 这违背了背包原则. 而工厂方法模式针对这一问题进行了改进. public interface Sender { public void send(); } public interface producer { public Sender produce(); } public class MailFactory implements producer{ public Sender pr

java设计模式 -------- 创建模式 之 抽象工厂模式

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 工厂方法模式和抽象工厂模式不好区分清楚: 工厂方法模式特点: 1. 一个抽象产品类,可以派生出多个具体产品类. 2. 一个抽象工厂类,可以派生出多个具体工厂类. 3. 每个具体工厂类只能创建一个具体产品类的实例. 抽象工厂模式特点: 1. 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类. 2. 一个抽象工厂类,可以派生出多个具体工厂类. 3. 每个具体工厂类可以创建多个

iOS设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂的生活场景,卖早点的小摊贩,他给你提供包子,馒头,地沟油烙的煎饼等,小贩是一个工厂,它生产包子,馒头,地沟油烙的煎饼.该场景对应的UML图如下所示: 图1:简单工厂模式UML图 简单工厂模式的参与者: 工厂(Factory)角色:接受客户端的请求,通过请求负责创建相应的产品对象. 抽象产品(Abstract Product)角色: 是工厂模式所创建对象的父类或是共同拥有的接口.可是抽象类或接口. 具体产品(Conc

简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别

结合简单示例和UML图,讲解工厂模式简单原理. 一.引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!",坐上Bmw后他说"开宝马车!",坐上 Audi后他说"开奥迪车!".你一定说:这人有病!直接说开车不就行了?!而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的!幸运的是这种有

工厂模式[3] 抽象工厂 Abstract Factory

简介 1.简单工厂,或静态工厂,产品接口 定义:专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类或实现同一接口 优点:客户端可以直接消费产品,而不必关心具体产品的实现(不关心对象的构造方法是怎么new的),消除了客户端直接创建产品对象的责任,实现了对责任的分割. 缺点:工厂类记录了所有产品的创建逻辑,一旦不能正常工作,整个系统都会受到影响:而且当产品种类多.结构复杂的时候,把所有创建工作放进一个工厂中来,会使后期程序的扩展较为困难. 2.工厂方法,工厂接口+产品接口 定义:在

设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)

原文地址:http://blog.chinaunix.net/uid-25958655-id-4243289.html 简单工厂模式 当需要加法类的时候,调用工厂类的CreateOperate(),要指定制造的Product 例如在大话设计模式P11给的运算工厂例子: public static Operation createOperate(string operate) { Operation oper = null; 12 switch (operate) { case "+":

人人都能看懂的工厂方法模式和抽象工厂模式的区别

设计模式中的工厂方法模式和抽象工厂模式一直不知不觉地使用在程序设计中,但是就是经常只有实践没有进行理论指导,所以感觉有一点半路子出家而没有系统学习过的不踏实的感觉.现在总结了一下之前项目中使用过的抽象工厂模式,加强对创建型模式中工厂模式的理解. 先举个栗子感性的理解工厂方法模式和抽象工厂模式这两者的区别. 有一个富商,在深圳开了三个手机厂,分别代工苹果手机,三星手机,华为手机.富商经常视察这3个厂,在苹果手机厂就说"大家要做好苹果手机",在三星厂就说"大家要做好三星手机&qu