天天看點

23設計模式之建造者模式(Builder) 一、概述 二、适用性三、參與者四、類圖  五、代碼實作  六、測試

傳回首頁

一、概述

       Builder屬于建立型模式中的一種,将一個複雜對象的建構與它的表示分離,使得同樣的建構過程可以建立不同的表示。

二、适用性

       1.當建立複雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時。

       2.當構造過程必須允許被構造的對象有不同的表示時。

三、參與者

       1. Builder:為建立一個Product對象的各個部件指定抽象接口。

       2. ConcreteBuilder:實作Builder的接口以構造和裝配該産品的各個部件。定義并明确它所建立的表示,提供一個檢索産品的接口。

       3. Director:構造一個使用Builder接口的對象。

       4. Product:表示被構造的複雜對象。ConcreteBuilder建立該産品的内部表示并定義它的裝配過程。包含定義組成部件的類,包括将這些部件裝配成最終産品的接口。

四、類圖 

23設計模式之建造者模式(Builder) 一、概述 二、适用性三、參與者四、類圖  五、代碼實作  六、測試

五、代碼實作 

1. Builder:為建立一個Product對象的各個部件指定抽象接口。

PersonBuilder.swift

import Foundation

/// PersonBuilder為建立一個Person對象的各個部件指定抽象接口
protocol PersonBuilder {
     
    /// 造頭
    func buildHead()
    
    /// 造身體
    func buildBody()
    
    /// 造腳
    func buildFoot()
    
    /// 造人
    func buildPerson() ->Person
    
}
           

2. ConcreteBuilder:實作Builder的接口以構造和裝配該産品的各個部件。定義并明确它所建立的表示,提供一個檢索産品的接口。

ManBuilder.swift

import Foundation

/// ManBuilder實作PersonBuilder的接口以構造和裝配該産品的各個部件。定義并明确它所建立的表示。提供一個檢索産品的接口。
class ManBuilder: PersonBuilder {
    
    /// 人員對象
    let person:Person = Man()
    
    // MARK: 造頭
    func buildHead() {
        person.head = "建造男人的頭"
        print(person.head)
    }
    
    // MARK: 造身體
    func buildBody() {
        person.body = "建造男人的身體"
        print(person.body)
    }
    
    // MARK: 造腳
    func buildFoot() {
        person.foot = "建造男人的腳"
        print(person.foot)
    }
    
    // MARK: 造人
    func buildPerson() ->Person {
        return person
    }
    
}
           

3. Director:構造一個使用Builder接口的對象。

PersonDirector.swift

import Foundation

/// PersonDirector構造一個使用PersonBuilder接口的對象。
class PersonDirector {
    
    // MARK: 通過裝配器構造人員對象
    func constructPerson(pb:PersonBuilder) ->Person {
        pb.buildHead()
        pb.buildBody()
        pb.buildFoot()
        return pb.buildPerson()
    }

}
           

4. Product:表示被構造的複雜對象。ConcreteBuilder建立該産品的内部表示并定義它的裝配過程。包含定義組成部件的類,包括将這些部件裝配成最終産品的接口。

a) Person.swift 

import Foundation

/// Person 表示被構造的複雜對象
class Person {
    
    /// 頭
    var head:String = ""
    /// 身體
    var body:String = ""
    /// 腳
    var foot:String = ""
    
}
           

b) Man.swift

import Foundation

/// 男人
class Man: Person {
    
} 
           

六、測試

1. 代碼

// 建造者模式
// 構造器
let pd = PersonDirector()
// 裝配器
let mb = ManBuilder()
// 建立對象
let person = pd.constructPerson(mb)
           

2. 運作結果

建造男人的頭

建造男人的身體

建造男人的腳

繼續閱讀