zoukankan      html  css  js  c++  java
  • 抽象工厂

    定义:

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

    角色划分:

      角色一:

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

      角色二:

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

      角色三:

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

      角色四:

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

    动态切换:

      可根据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;
    调用工厂方法创建对象
  • 相关阅读:
    PHP流程控制考察点
    PHP运算符考察点
    PHP的魔术常量
    android窗体溢出WindowManager$BadTokenException: Unable to add window -- token null is not for an applica
    android网络访问异常java.lang.SecurityException: Permission denied (missing INTERNET permission?)
    快速排序算法思想
    播放Assets下的指定音频时,变成播放所有音频了
    python-01-Python环境搭建
    eclipse安装svn
    DOM children方法
  • 原文地址:https://www.cnblogs.com/jiefangzhe/p/9562508.html
Copyright © 2011-2022 走看看