【iOS-設(shè)計(jì)模式】創(chuàng)建型之工廠方法模式

概念

工廠方法模式(Factory Method Pattern)在基類中建立一個(gè)抽象方法,子類可以通過改寫這一方法來改變創(chuàng)建對象的具體過程。工廠方法模式讓子類來決定如何創(chuàng)建對象,來達(dá)到封裝的目的。

實(shí)例

接下來還是使用計(jì)算器的例子,我們先實(shí)現(xiàn)一個(gè)工廠協(xié)議 CalculateFactoryProtocol 返回一個(gè)計(jì)算處理類:

@class Calculate;
@protocol CalculateFactoryProtocol <NSObject>

+ (Calculate *)createCalculate;

@end

工廠實(shí)現(xiàn)

然后創(chuàng)建相應(yīng)的用于創(chuàng)建生產(chǎn)計(jì)算方法處理類的工廠(都遵循 CalculateFactoryProtocol 協(xié)議),實(shí)現(xiàn)協(xié)議中的協(xié)議方法 createCalculate,返回一個(gè)計(jì)算處理父類,而所實(shí)例化的為各個(gè)計(jì)算處理方法類(都是繼承自計(jì)算處理父類 Calculate):

AddFactory.h

#import <Foundation/Foundation.h>
#import "CalculateFactoryProtocol.h"

@interface AddFactory : NSObject <CalculateFactoryProtocol>

@end

AddFactory.m

#import "AddFactory.h"
#import "Calculate_Add.h"

@implementation AddFactory

+ (Calculate *)createCalculate {
    return [[Calculate_Add alloc] init];
}

@end

SubFactory.h

#import <Foundation/Foundation.h>
#import "CalculateFactoryProtocol.h"

@interface SubFactory : NSObject <CalculateFactoryProtocol>

@end

SubFactory.m

#import "SubFactory.h"
#import "Calculate_Sub.h"

@implementation SubFactory

+ (Calculate *)createCalculate {
    return [[Calculate_Sub alloc] init];
}

@end

調(diào)用

Calculate *calculate_add = [AddFactory createCalculate];
calculate_add.firstNum = 3.0f;
calculate_add.secondNum = 6.0f;
NSLog(@"工廠方法模式-求和:%f",[calculate_add getResult]);

Calculate *calculate_sub = [SubFactory createCalculate];
calculate_sub.firstNum = 9.0f;
calculate_sub.secondNum = 3.0f;
NSLog(@"工廠方法模式-求差:%f",[calculate_sub getResult]);

執(zhí)行結(jié)果:

執(zhí)行結(jié)果

從對象的創(chuàng)建來講,這個(gè)將對象的創(chuàng)建擴(kuò)展到了對象子類,從設(shè)計(jì)原則中中的依賴角度來看,原來的工廠需要依賴的各種具體的服裝子類的引用,現(xiàn)在將這些進(jìn)行各種分類,這里是以工廠的形式進(jìn)行分類,抽象組件不依賴于具體的實(shí)現(xiàn)組件,已經(jīng)完成的擴(kuò)展可以不需要變化,如果有新增需求只需要增加新的功能接口,高層組件不需要太大的變化。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容