日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

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

生成器

生成器,也成為建造者模式,同樣是創(chuàng)建對象時的設(shè)計(jì)模式。該模式下有一個Director(指揮者),客戶端知道該類引用用來創(chuàng)建產(chǎn)品。還有一個Builder(建造者),建造者知道具體創(chuàng)建對象的細(xì)節(jié)。

指揮者只是起到協(xié)調(diào)的作用,它有一個Builder引用用于指揮Builder如何創(chuàng)建對象,Builder內(nèi)就是為了構(gòu)建對象的算法。

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

使用場景

1.需要創(chuàng)建涉及各種部件的復(fù)雜對象。創(chuàng)建對象的算法應(yīng)該獨(dú)立于部件的裝配方式。常見的例子是構(gòu)建組合對象。

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

?

生成器與抽象工廠對比

生成器

構(gòu)建復(fù)雜對象

以多個步驟構(gòu)建對象

在構(gòu)建對象過程的最后一步返回產(chǎn)品

專注于一個特定產(chǎn)品

?

抽象工廠

構(gòu)建簡單或復(fù)雜對象

以單一步驟構(gòu)建對象

以單一方式構(gòu)建對象

立刻返回產(chǎn)品

強(qiáng)調(diào)一套產(chǎn)品

?

Demo

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

首相創(chuàng)建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

創(chuàng)建Builder,Builder封裝了創(chuàng)建類的具體細(xì)節(jié)

#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知道生產(chǎn)產(chǎn)品,但并不知道具體生產(chǎn)細(xì)節(jié)。

#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);

結(jié)果:

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封裝不同的創(chuàng)建對象邏輯,產(chǎn)生不同的對象,同時分離了創(chuàng)建層和表示層。

轉(zhuǎn)載于:https://www.cnblogs.com/madpanda/p/4663415.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。