抽象工厂

定义:

  定义一个用于创建对象的统一接口,然后由子类实现;

角色划分:

  角色一:

    抽象产品: 定义产品规范的协议

  角色二:

    具体产品: 具体实现的目标对象

  角色三:

    抽象工厂: 定义工厂规范的协议 (协议规定, 能够派生出遵循抽象产品协议的目标对象)

  角色四:

    具体工厂: 派生出具体实现的目标对象

动态切换:

  可根据plist文件,xml文件,json文件,宏定义,或者后台接口等,配置相应参数,不需要修改代码,动态创建相应具体工厂和具体产品;

具体代码实现:

#import <UIKit/UIKit.h>

@protocol PaymentProtocol<NSObject>

/** 获取支付对象*/
- (instancetype)getPaymentObject;

/**
 其他创建支付方式所需相应参数等
 - (instancetype)getPaymentMoney;
 - (instancetype)getPaymentUserName;
 */


@end
抽象产品协议

    

#import <Foundation/Foundation.h>
#import "PaymentProtocol.h"
@interface WXPayment : NSObject<PaymentProtocol>


@end


#import "WXPayment.h"

@implementation WXPayment


- (instancetype)getPaymentObject{
    
    /** 具体微信支付方式创建,返回相应对象*/
    return nil;
}


@end
具体产品实现
#import <UIKit/UIKit.h>
#import "PaymentProtocol.h"

@protocol PaymentFactoryProtocol<NSObject>

/** 获取具体相应支付产品*/
- (id<PaymentProtocol>)getSomePayment;

@end
抽象工厂
#import <Foundation/Foundation.h>
#import "PaymentFactoryProtocol.h"

@interface WXPaymentFactory : NSObject<PaymentFactoryProtocol>

@end


#import "WXPaymentFactory.h"
#import "PaymentProtocol.h"
#import "WXPayment.h"
@implementation WXPaymentFactory


- (id<PaymentProtocol>)getSomePayment{
    
    /** 返回所创建的对应支付产品对象*/
    return [[WXPayment alloc] init];
}


@end
View Code
    id<PaymentFactoryProtocol> wxFactory = [[WXPaymentFactory alloc] init];
    id<PaymentProtocol> payment = wxFactory.getSomePayment;
    id object = payment.getPaymentObject;
调用工厂方法创建对象
原文地址:https://www.cnblogs.com/jiefangzhe/p/9562508.html