IOS設計架構模式:構建者模式和中介者模式
阿新 • • 發佈:2019-01-04
一、構建者模式
什麼是構建者模式?
將一個“複雜物件的構建演算法”與它的“部件及組裝方式”分離,使得構建演算法和組裝方式可以獨立應對變化;複用同樣的構建演算法可以建立不同的表示,不同的構建過程可以複用相同的部件組裝方式。
比如,建造一棟大廈,那麼就需要一個總建築工程師(也就是指導者,相當於uml圖中的組裝者),N個包工頭(也就是承包商,相當於uml圖中的構建者),一個包工頭有M個小工(也就是搬磚的、貼磚的、木工等等,相當於uml圖中的生成者),指導者可以使用承包商A、承包商B、承包商C的自由組合,單個承包商又可以使用搬磚的、貼磚的、木工的自由組合,這樣就把構建和組裝分離開了。
在建立者模式中,客戶端不再負責物件的建立與組裝,而是把這個物件建立的責任交給其具體的建立者類,把組裝的責任交給組裝類,客戶端只負責物件的呼叫,從而明確了各個類的職責。雖然利用建立者模式可以創建出不同型別的產品,但是如果產品之間的差異巨大,則需要編寫多個建立者類才能實現,如果這樣結合工廠模式更好。
程式碼示例:
建立構建者協議類Builder
#import <Foundation/Foundation.h> // 構建者 @protocol Builder <NSObject> // 構建部分 - (NSString *)builderPart; @end
建立具體生成者類ConcreteBuild
ConcreteBuild.h
#import <Foundation/Foundation.h>
#import "Builder.h"
@interface ConcreteBuild : NSObject <Builder>
@end
ConcreteBuild.m
#import "ConcreteBuild.h" @implementation ConcreteBuild #pragma mark - Builder - (NSString *)builderPart { return @"實現協議, 返回產品"; } @end
建立組裝者類Director
Director.h
#import <Foundation/Foundation.h>
#import "Builder.h"
@interface Director : NSObject
// 建立傳入的實現者
- (instancetype)initWithBuilder:(id<Builder>)builder;
// 建造
- (NSString *)construct;
@end
Director.m
#import "Director.h"
@interface Director ()
@property (nonatomic, copy) id<Builder> builder;
@end
@implementation Director
- (instancetype)initWithBuilder:(id<Builder>)builder {
self = [super init];
if (self) {
_builder = builder;
}
return self;
}
// 建造
- (NSString *)construct {
// 建立部件
return [self.builder builderPart];
}
@end
ViewController呼叫
#import "ViewController.h"
#import "Director.h"
#import "ConcreteBuild.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 1.建立生成者, 知道要做的產品
ConcreteBuild *build = [[ConcreteBuild alloc] init];
NSString *str2 = [build builderPart];
// 2.建立承包商
Director *director = [[Director alloc] initWithBuilder:build];
// 3.交付產品
NSString *str = [director construct];
NSLog(@"str = %@, str2 = %@",str, str2);
}
@end
離開就離開就是
構建者模式