国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - iOS App設計模式開發中對建造者模式的運用實例

iOS App設計模式開發中對建造者模式的運用實例

2021-01-14 18:19Gof Lee IOS

這篇文章主要介紹了iOS App設計模式開發中對建造者模式的運用實例,示例代碼為傳統的Objective-C,需要的朋友可以參考下

定義                                                                                                       

"將一個復雜對象的構建與它的表現分離,使得同樣的構建過程可以創建不同的表現"。
看這個概念,可能感覺很是抽象,能看懂但是不知道有什么用。我們打一個比方來理解上面的定義。打比方之前,咱們先來聊聊這個設計模式是干什么用的?我們為什么要用這個模式呢?建造者模式負責將構建復雜對象的過程和它的部件解耦,也就是過程和部件的解耦。比如說汽車,是一個很復雜的對象,它有很多的部件,車輪、發動機、座椅、車門、油箱等等;它的組裝過程也很復雜(需要專業人士按步驟進行裝配),建造者模式就是為了將部件和組裝過程分開的。同樣的,我們使用的計算機也一樣,有很多的部件,組裝過程也很復雜(當然,對于我們這樣的專業人士可能感覺不復雜)。建造者模式最大的好處就是使得構建過程和表現分離,因此若需要改變一個產品的表現,只需要重新定義一個具體的建造者就可以了(這句話理解起來有點難度,還是拿車來打比方,我們將車的組裝過程獨立出來,用這個組裝過程,我們即可以組裝寶馬車,也可以組裝奔馳車,或者其他的車型,我們只需要重新定義一個具體的建造者(用于產品表現的類)就可以了)。

動機                                                                                                       

在軟件系統中,有時候會遇到一個復雜對象(比如說上面例子中的汽車)的創建,它通常由幾個部分的子對象采用一定的算法(過程)構成;由于需求的變化,這個復雜對象的各個部分經常面臨著劇烈的變化(比如上面例子中,各種車型用的車門、方向盤、發動機等,是不一樣的),但是將各個部分組合在一起的算法(過程)是相對穩定的。

建造者模式就是在這樣的需求下誕生的,它封裝了變化點(組成部分),使得同樣的構建過程可以創建不同的表現。

建造者模式是當在創建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時適用的模式。

建造者模式包含產品類(product)、抽象建造者類(builder)、具體建造者類(concretebuilder1、concretebuilder2…)和指揮者類(director)

從下面的代碼中看各個類的使用:

復制代碼 代碼如下:

personbuilder *builder = [[personthinbuilder alloc]init];
personview *personview = [persondirector creatperson:builder];


其中 personbuilder 是抽象建造者類,personthinbuilder 是具體建造者類,personview 是產品類,persondirector 是指揮者類。

 

由代碼了解使用方式:

1、創建具體建造者。
2、指揮者通過具體建造者來返回產品。

感覺建造者模式與工廠方法模式非常類似,但是加入了指揮者類。

結構圖

iOS App設計模式開發中對建造者模式的運用實例

從結構圖可以看到,生成器模式有兩個重要的角色:director(指導者)和builder(建造者)。director知道builder應該建造什么(建造的過程),builder知道如何建造(表現)。在director類中定義了一個construct方法,指導具體的建造者concretebuilder的對象去buildpart。builder是一個抽象接口(協議),該協議中包含建造各個部分的方法(buildpart),用來構建實際的產品product,另外還有一個getresult方法,用來向客戶端返回構建完成的product。

這樣說不知道大家是不是感覺很抽象?那咱們用一個生活的例子來通俗點說。比如現在我要在老家修一個房子,首先我不知道怎么修房子(砌墻,缺建造者),然后我也不知道怎么設計(修幾個房間,房間的布局,房間的窗戶怎么設計等等,缺指導者),于是我找來一幫民工(建造者),他們會砌墻;另外我還得找設計師(指導者),他知道怎么設計;最后,我還要確保民工(建造者)聽設計師(指導者)的指導,哪里需要砌一堵墻,哪里需要安裝窗戶等等,這樣民工(建造者)就開始蓋房子,在這個建造過程中,設計師(指導者)只負責設計和下達命令。房子建成功后,民工(建造者)向我交房。說白了,就是director(指導者)負責把控宏觀方面(過程),builder(建造者)負責把控微觀方面(表現) 。

下面咱們還是通過代碼來說明這個結構圖。

實例

建造者模式的代碼                                                                                    

product.m(部分代碼):  

復制代碼 代碼如下:


- (id)init

 

{

    self = [superinit];

   

    if (self)

    {

        arrparts = [nsmutablearrayarray];

    }

   

    returnself;

}

 

- (void)addpart:(nsstring *)part

{

    [arrpartsaddobject:part];

}

 

- (void)show

{

    for (nsstring *strpart inarrparts)

    {

        nslog(@"%@",strpart);

    }

}


builder.h(部分代碼):

復制代碼 代碼如下:


@classproduct;

 

@protocol builder <nsobject>

 

- (void)addpartone;

- (void)addparttwo;

- (product *)getresult;

 

@end


concretebuilder.m(部分代碼):

復制代碼 代碼如下:


- (id)init

 

{

    self = [superinit];

   

    if (self)

    {

        product = [[productalloc] init];

    }

   

    returnself;

}

 

- (void)addpartone

{

    [productaddpart:@"part one"];

}

 

- (void)addparttwo

{

    [productaddpart:@"part two"];

}

 

- (product *)getresult

{

    returnproduct;

}

director.m(部分代碼):

- (void)construct:(id<builder>)builder

{

    [builder addpartone];

    [builder addparttwo];

}


客戶端調用代碼:

復制代碼 代碼如下:


director *director = [[directoralloc] init];

 

        id<builder> builder = [[concretebuilderalloc] init];

       

        [director construct:builder];

        product *product = [builder getresult];

        [product show];

       

        [builder release];

        [director release];

 

何時使用建造者模式                                                                                

建造者模式常用于如下情形:

需要創建涉及各種部件的復雜對象。創建對象的算法應該獨立于部件的裝配方式。
構建過程需要以不同的方式構建對象。

ps:在facebook的開源動畫框架pop中也有對builder pattern類似的應用:

 

復制代碼 代碼如下:

 

popanimatableproperty *animatableproperty = [popanimatableproperty propertywithname:@"property" initializer:^(popmutableanimatableproperty *prop) {
    prop.writeblock = ^(id obj, const cgfloat values[]) {
    };
    prop.readblock = ^(id obj, cgfloat values[]) {
    };
}];

 


這里的initializer本質上就是builder,只是叫法不同而已。

延伸 · 閱讀

精彩推薦
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5272021-01-16
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111302021-03-15
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美久久久| 国产中文一区 | 日本久久综合 | 久久人人爽人人爽 | 中文字幕天堂 | 亚洲精品久久久久久久久久吃药 | 亚洲电影在线观看 | 久久久久久日产精品 | 亚洲精品久久久久久久蜜桃 | 毛片久久久| 成人午夜精品久久久久久久蜜臀 | 日韩成人在线观看视频 | 久艹精品| 亚洲视屏 | 国产精品资源在线 | 成人性大片免费观看网站 | 草草在线观看 | 极品国产精品 | 国产成人av一区二区三区 | 精品一区二区三区视频 | 狠狠爱亚洲 | 色综合网址| 久久久久久久久久久久久国产 | 亚洲国产精品99久久久久久久久 | 91国自产精品中文字幕亚洲 | 国产免费黄色 | 欧美精品一区二区久久 | 精品一区二区久久久久久久网站 | 欧美喷潮久久久xxxxx | 久久久久久国产精品 | 亚洲一区av在线 | 羞羞视频免费观看网站 | 亚洲欧美一区二区三区不卡 | 亚洲二区在线 | 久久精彩| 国产一区二区久久 | 国产精品99精品久久免费 | 99精品欧美一区二区三区综合在线 | 中文字幕在线精品 | 亚洲欧美激情在线 | 日韩欧美视频在线 |