23设计模式之建造者模式(Builder)
2015-09-20 15:04
441 查看
返回首页
Builder属于创建型模式中的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2.当构造过程必须允许被构造的对象有不同的表示时。
2. ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示,提供一个检索产品的接口。
3. Director:构造一个使用Builder接口的对象。
4. Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
PersonBuilder.swift
ManBuilder.swift
PersonDirector.swift
a) Person.swift
b) Man.swift
建造男人的身体
建造男人的脚
一、概述
Builder属于创建型模式中的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
二、适用性
1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。2.当构造过程必须允许被构造的对象有不同的表示时。
三、参与者
1. Builder:为创建一个Product对象的各个部件指定抽象接口。2. ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示,提供一个检索产品的接口。
3. Director:构造一个使用Builder接口的对象。
4. Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
四、类图
五、代码实现
1. Builder:为创建一个Product对象的各个部件指定抽象接口。
PersonBuilder.swiftimport Foundation /// PersonBuilder为创建一个Person对象的各个部件指定抽象接口 protocol PersonBuilder { /// 造头 func buildHead() /// 造身体 func buildBody() /// 造脚 func buildFoot() /// 造人 func buildPerson() ->Person }
2. ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示,提供一个检索产品的接口。
ManBuilder.swiftimport 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.swiftimport 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. 运行结果
建造男人的头建造男人的身体
建造男人的脚
相关文章推荐
- Android Gradle 构建工具(Android Gradle Build Tools)是什么?
- 如何把一个UITableView滚动到tableFooterView?
- ios9兼容系列之解决iPad提交报错“iPad Multitasking support requires launch story board in bundle '”
- Mycat全局Sequence详解
- Maven打包web项目报错Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if
- Android UI高级控件之SimpleAdapter
- 徒手用Java来写个Web服务器和框架吧<第二章:Request和Response>
- 在UIButton中如何将imageView和titleView居中且上下分布
- android 事件处理机制之requestDisallowInterceptTouchEvent
- 使用Libcef+Duilib创建自己的Chrome内核浏览器
- Minor issue about class define and the valid scope of scope operator
- iOS:搜索栏控件UISearchBar and SearchDisplayController的使用
- IOS基础UI之(五)UIAlertView、UIActionSheet和UIAlertController详解
- JAVA基础学习(十三)--String、StringBuilder、StringBuffer与包装类
- UIMenuController的使用,对UILabel拷贝以及定制菜单
- A014-values资源
- UCGUI使用外部字库芯片显示汉字
- poj 2031--Building a Space Station(prim)
- poj 2031--Building a Space Station(prim)
- chmod\chown\chgrp\umask\SUID \SGID 详解