23设计模式之建造者模式(Builder)

来源:互联网 发布:cms插件 编辑:程序博客网 时间:2024/06/06 12:38

返回首页



一、概述

       Builder属于创建型模式中的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。


二、适用性

       1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

       2.当构造过程必须允许被构造的对象有不同的表示时。


三、参与者

       1. Builder:为创建一个Product对象的各个部件指定抽象接口。

       2. ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示,提供一个检索产品的接口。

       3. Director:构造一个使用Builder接口的对象。

       4. Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。包含定义组成部件的类,包括将这些部件装配成最终产品的接口。


四、类图 

图片


五、代码实现 

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. 运行结果

建造男人的头

建造男人的身体

建造男人的脚


0 0