- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Builer设计模式.doc
Builder 模式
小组成员:马茹浩,肖思宇 李明烨,阎慧玲
1.概述
在软件开发的过程中,当遇到一个复杂的对象〃的创建工作,该对象由一定各 个部分的子对象用一定的算法构成,由于需求的变化,复杂对象的各个部分经常 面临剧烈的变化,但将它们组合在一起的算法相对稳定。
2.意图
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的 表不。
3.适用性
在以下情况使用Builder模式
?当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 ?当构造过程必须允许被构造的对象有不同的表示时。
4.结构
此模式结构如下页上图所示。
构建模式的组成
?抽象建造者角色(Builder):为创建一个Product对象的各个部件指定抽象接口,以规范产 品对象的各个组成成分的建造。一般而言,此角色规定要实现杂对象的哪些部分的创建, 并不涉及具体的对象部件的创建。
?具体建造者(ConcreteBuilder)
1) 实现Builder的接口以构造和装配该产品的各个部件。即实现抽象建造者角色Builder 的方法。
2) 定义并明确它所创建的表示,即针对不同的商业逻辑,具体化复杂对象的各部分的创建
3) 提供一个检索产品的接口
4) 构造一个使用Builder接口的对象即在指导者的调用下创建产品实例
指导者(Director):调用具体建造者角色以创建产品对象的各个部分。指导者并没有涉及具 体产品类的信息,真正拥有具体产品的信息是具体建造者对象。它只负责保证对象各部分完 整创建或按某种顺序创建。
产品角色(Product):建造中的复杂对象。它要包含那些定义组件的类,包括将这些组件装 配成产品的接口。
交互过程
Client
Client Director ConcreateBuiIder
1 !
New ConcreteBuilder [
■
New Director(ConcreteBuilder)
i z
BuildPartAO
2
Construct
GetResult ■
BuildPartBO
BuildPartCO
T
7.效果
Builder模式的主要效果:
1 )它使你可以改变一个产品的内部表示Builder对象提供给导向器一个构造产品的抽象接 口。该接口使得生成器可以隐藏这个产品的表示和内部结构。它同时也隐藏了该产品是如何 装配的。因为产品是通过抽象接口构造的,你在改变该产品的内部表示时所要做的只是定义 一个新的生成器。
2)它将构造代码和表示代码分开Builder模式通过封装一个复杂对象的创建和表示方式提 高了对象的模块性。客户不耑要知道定义产品内部结构的类的所有信息;这些类是不出现在 Builder接口中的。每个Concrete Builder包含了创建和装配一个特定产品的所有代码。这些 代码只需要写一次;然后不同的Director可以复用它以在相同部件集合的基础上构作不同的 Product。
3 )它使你可对构造过程进行更精细的控制Builder模式与一下子就生成产品的创建型模式 不同,它是在导向者的控制下一步一步构造产品的。仅当该产品完成时导向者冰从生成器屮 取回它。因此Builder接口相比其他创建型模式能更好的反映产品的构造过程。这使你付以 更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。
例子
买肯德基
典型的儿童餐包括一个主食,一个辅食,一杯饮料和一个玩具(例如汉堡、 炸鸡、可乐和玩具车)。这些在不同的儿童餐中可以是不同的,但是组合成儿童 餐的过程是相同的。
客户端:顾客,想去买一套套餐(这里面包括汉堡,可乐,薯条),可以有1 号和2号两种套餐供顾客选择。
指导者角色:收银员。知道顾客想要买什么样的套餐,并告诉餐馆员工去准备
建造者角色:餐馆员工。按照收银员的要求去准备具体的套餐,分别放入汉堡, 可乐,薯条等。
产品角色:最后的套餐,所有的东西放在同一个盘子里面。
实现
指导者:收银员
class DirectorCashier
{
/**
*收银餐馆员工返回的食物 */
public function buildFood(Builder $builder) {
$builder-buildPartl();
$builder-buildPart2();
抽象建造者:
abstract class Builder
{
y **
*创建产品的第一部分 */
public abstract function buildPartl();
y **
*创建产品的第二部分 */
public abstract function buildPart2();
y **
*返回产品 */
public abstract function getProduct();
}
具体建造
文档评论(0)