专栏首页APP自动化测试Objective-C 工厂模式(下) -- 抽象工厂模式

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python -- 使用pickle 和 CPickle对数据对象进行归档和解析

    经常遇到在Python程序运行中得到了一些字符串、列表、字典、对象等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据。

    周希
  • 实现点击图片不同区域响应不同的事件

    开始考虑以纵轴为0度, 计算点击坐标跟中心点连线并计算跟纵轴的角度来判断, 不过代码写好后发现在不同的设备上有误差

    周希
  • iOS实现UICollectionViewDataSource与Controller的分离

    之前每次用到UICollectionView的时候都会都需要在Controller里面去实现DataSource & Delegate方法

    周希
  • 保护SMPTE ST 2059-2 PTP网络的策略

    本文来自SMPTE 2019的演讲,演讲者是来自Mellanox Technologies的Thomas Kernen和来自Oregano Systems的N...

    用户1324186
  • Python多进程使用队列共享数据协同判断素数

    创建两个队列,qIn用来存储指定范围内的整数,qOut用来存放该范围内的所有素数。创建多个进程,每个进程依次从qIn队列中获取整数,并判断是否为素数,如果是素数...

    Python小屋屋主
  • HTML UTF-8 货币符号

    <p>我将显示 &euro;<p> <p>我将显示 &#8364;<p> <p>我将显示 &#x20AC;<p>

    用户4047016
  • JAVA学习中Swing部分JDialog对话框窗体的简单学习

    package com.swing; import java.awt.Color; import java.awt.Container; import jav...

    别先生
  • JDBC封装实例

    import java.sql.SQLException; import java.util.Scanner; import com.bjsxt.daoIm...

    葆宁
  • 尾递归优化原理与Python实现(以Fibonacci数列和小明爬楼梯问题为例)

    众所周知,在函数递归调用时,要保存函数调用的位置以便使得被调函数结束后能够返回正确的位置,这个信息保存在线程栈中。由于栈的空间有限,所以如果函数递归调用深度超过...

    Python小屋屋主
  • Django 惰性机制

    惰性机制:Publisher.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它并不会马上执行sql,而是...

    py3study

扫码关注云+社区

领取腾讯云代金券