美文网首页
设计模式--工厂模式(抽象工厂)

设计模式--工厂模式(抽象工厂)

作者: user_bo | 来源:发表于2019-02-25 16:41 被阅读0次

1.工厂模式(抽象工厂)

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态,是为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

抽象工厂和简单工厂的区别:抽象工厂返回的是所需工厂,简单工厂返回的是所需产品

2.具体案例 (指定工厂生产手机)

谷歌工厂生产谷歌手机,
三星工厂可以生成三星手机。
通过抽象工厂的模式设计程序

程序类角色划分:
抽象工厂:

//抽象工厂 :具备生产手机的功能

@interface BaseFactory : NSObject
- (BasePhone *) creatPhone;
@end

@implementation BaseFactory
//由 具体子类 复写该方法
- (BasePhone *) creatPhone{
    return nil;
}
@end

具体工厂: 谷歌工厂,三星工厂

//谷歌工厂: 生成谷歌手机
@interface GoogleFactory : BaseFactory
@end

@implementation GoogleFactory
- (BasePhone *)creatPhone{
    NSLog(@"GoogleFactory products");
    return [[GooglePhone alloc]init];
}
@end

//三星工厂:生产三星手机
@interface SamsungFactory : BaseFactory
@end

@implementation SamsungFactory
- (BasePhone *)creatPhone{
    NSLog(@"SamsungFactory products");
    return [[SamsungPhone alloc]init];
}
@end

抽象产品:

// 可以封装 产品的共有功能
@interface BasePhone : NSObject
@end
@implementation BasePhone
@end

具体产品:谷歌手机,三星手机

// 三星手机
@interface SamsungPhone : BasePhone
@end

@implementation SamsungPhone
@end

//谷歌手机
@interface GooglePhone : BasePhone
@end

@implementation GooglePhone
@end

工厂管理类::

#import "BaseFactory.h"
#import "GoogleFactory.h"
#import "SamsungFactory.h"

// 枚举工厂的类型
typedef enum : NSUInteger {
    kGoogle = 0x01,
    kSamsung,
} EFactoryType;

@interface FactoryManager : NSObject
/**
 便利构造器
 @param type 创建工厂的类型
 @return 返回创建的工厂
 */
+ (BaseFactory *)factoryWithType:(EFactoryType) type;
@end

@implementation FactoryManager
+ (BaseFactory *)factoryWithType:(EFactoryType) type{
    
    BaseFactory *factory = nil;
    if (type == kGoogle){
        factory = [[GoogleFactory alloc]init];
    }else if (type == kSamsung){
        factory = [[SamsungFactory alloc]init];
    }
    return factory;
}
@end

客户端调用

  // 抽象工厂模式 vc客户端调用
    BaseFactory * factory = [FactoryManager factoryWithType:kGoogle];// 只需要更换枚举值,就可以更换指定工厂

    [factory creatPhone];

3.抽象工厂的UML

抽象工厂.png

client :vc客户端 ,abstractFactory:抽象工厂类
productFactory1:谷歌工厂 , productFactory2:三星工厂
abstractProductA:手机 ,abstractProductB:手环
productA2:三星手机 ,productB2:三星手环
productA1:谷歌手机 ,productB1:谷歌手环

uml解析:
client -- abstractFactory :关联关系
client --abstractProductA / abstractProductB :关联关系

abstractFactory -- productFactory1 / productFactory2 : 泛化关系
abstractProductA -- productA1 / productB1 : 泛化关系
abstractProductB -- productA2 / productB2 : 泛化关系

productFactory1 -- productA1 / productB1 : 依赖关系
productFactory2 -- productA2 / productB2 :依赖关系

注释 :
泛化(generalization)关系: (继承)
时指一个类(子类、子接口)继承另外一个类(称为父类、父接口)的功能,并可以增加它自己新功能的能力,继承是类与类或者接口与接口最常见的关系,在Java中通过关键字extends来表示。

相关文章

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • Android 源码设计模式解析与实战 读书笔记 6 抽象工厂模

    创建型设计模式 —— 抽象工厂模式 1. 抽象工厂模式介绍 抽象工厂模式(Abstract Factory Pat...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • Go语言设计模式(3)抽象工厂模式

    Go语言设计模式(3)抽象工厂模式 抽象工厂模式的定义 抽象工厂模式的定义如下: Provide an inter...

  • 创建型设计模式

    一 . 工厂模式 二. 抽象工厂设计模式

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

网友评论

      本文标题:设计模式--工厂模式(抽象工厂)

      本文链接:https://www.haomeiwen.com/subject/pmdgyqtx.html