日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Objective-C设计模式——生成器Builder(对象创建)

發布時間:2025/7/25 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Objective-C设计模式——生成器Builder(对象创建) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

生成器

生成器,也成為建造者模式,同樣是創建對象時的設計模式。該模式下有一個Director(指揮者),客戶端知道該類引用用來創建產品。還有一個Builder(建造者),建造者知道具體創建對象的細節。

指揮者只是起到協調的作用,它有一個Builder引用用于指揮Builder如何創建對象,Builder內就是為了構建對象的算法。

其實生成器模式,就是為了定制某些特定對象而產生的模式。對象的過長往往非常的復雜,如果不是用該模式來創建對象,對象創建類將會非常的冗余且難以復用。使用生成器將表現層和創建層分離更加易于擴展和解耦。

使用場景

1.需要創建涉及各種部件的復雜對象。創建對象的算法應該獨立于部件的裝配方式。常見的例子是構建組合對象。

2.構建過程需要以不同的方式(例如,部件或表現的不同組合)構建對象。

?

生成器與抽象工廠對比

生成器

構建復雜對象

以多個步驟構建對象

在構建對象過程的最后一步返回產品

專注于一個特定產品

?

抽象工廠

構建簡單或復雜對象

以單一步驟構建對象

以單一方式構建對象

立刻返回產品

強調一套產品

?

Demo

比如汽車制造廠需要制造兩種不同的汽車:

首相創建Car類,有name和speed兩個屬性

#import <Foundation/Foundation.h>@interface Car : NSObject@property(nonatomic, strong)NSString *name;@property(nonatomic ,assign)int speed;@end#import "Car.h"@implementation Car@end

創建Builder,Builder封裝了創建類的具體細節

#import <Foundation/Foundation.h> #import "Car.h"@interface CarBuilder : NSObject-(CarBuilder *)buildCar; -(CarBuilder *)buildCarName; -(CarBuilder *)buildCarSpeed; -(Car *)getProduct;@end#import "CarBuilder.h"@implementation CarBuilder {Car *_product;} -(CarBuilder *)buildCar {_product = nil;_product = [Car new];return self; }-(CarBuilder *)buildCarName {_product.name = @"benz";return self; }-(CarBuilder *)buildCarSpeed {_product.speed = 100;return self; }@end

具體的Builder類:

#import <Foundation/Foundation.h> #import "CarBuilder.h"@interface CarBuilderBenz : CarBuilder@end#import "CarBuilderBenz.h"@implementation CarBuilderBenz {Car *_product; }-(CarBuilder *)buildCar {_product = nil;_product = [Car new];return self; }-(CarBuilder *)buildCarName {_product.name = @"benz";return self; }-(CarBuilder *)buildCarSpeed {_product.speed = 100;return self; }-(Car *)getProduct {return _product; }@end#import <Foundation/Foundation.h> #import "CarBuilder.h" @interface CarBuilderBMW : CarBuilder@end#import "CarBuilderBMW.h"@implementation CarBuilderBMW {Car *_product; }-(CarBuilder *)buildCar {_product = nil;_product = [Car new];return self; }-(CarBuilder *)buildCarName {_product.name = @"BMW";return self; }-(CarBuilder *)buildCarSpeed {_product.speed = 120;return self; }-(Car *)getProduct {return _product; } @end

Director類,Director知道生產產品,但并不知道具體生產細節。

#import <Foundation/Foundation.h> #import "CarBuilder.h" #import "Car.h"@interface CarDirector : NSObject-(Car *)createCarBenz:(CarBuilder *)builder; -(Car *)createCarBMW:(CarBuilder *)builder;@end#import "CarDirector.h"@implementation CarDirector-(Car *)createCarBenz:(CarBuilder *)builder {[builder buildCar];[builder buildCarName];[builder buildCarSpeed];return [builder getProduct]; }-(Car *)createCarBMW:(CarBuilder *)builder {[builder buildCar];[builder buildCarName];[builder buildCarSpeed];return [builder getProduct]; }@end

客戶端代碼:

CarDirector *director = [CarDirector new];CarBuilderBenz *benzBuilder = [CarBuilderBenz new];CarBuilderBMW *BMWBuilder = [CarBuilderBMW new];Car *benz = [director createCarBenz:benzBuilder];Car *bmw = [director createCarBMW:BMWBuilder];NSLog(@"benz: name = %@ ,speed = %d",benz.name ,benz.speed);NSLog(@"BMW: name = %@ ,speed = %d",bmw.name ,bmw.speed);

結果:

2015-07-21 09:15:04.298 Builder[41745:10008190] benz: name = benz ,speed = 100 2015-07-21 09:15:04.298 Builder[41745:10008190] BMW: name = BMW ,speed = 120

可以看到,不同的builder封裝不同的創建對象邏輯,產生不同的對象,同時分離了創建層和表示層。

轉載于:https://www.cnblogs.com/madpanda/p/4663415.html

總結

以上是生活随笔為你收集整理的Objective-C设计模式——生成器Builder(对象创建)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。