前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >建造者模式

建造者模式

作者头像
张俊怡
发布2018-04-24 13:44:08
6150
发布2018-04-24 13:44:08
举报

定义

将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。 实用范围

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

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

在这样的设计模式中,有以下几个角色:

1,builder:为创建一个产品对象的各个部件指定抽象接口。

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

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

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

类图

1332654150_2478.jpg

建造者模式与工厂模式的区别

代码语言:javascript
复制
   我们可以看到,建造者模式与工厂模式是极为相似的,总体上,建造者模式仅仅只比工厂模式多了一个“导演类”的角色。在建造者模式的类图中,假如把这个导演类看做是最终调用的客户端,那么图中剩余的部分就可以看作是一个简单的工厂模式了。

   与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类——导演类。也就是说,工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;而建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端

例如

代码语言:javascript
复制
public interface PersonBuilder {

void buildHead();

void buildBody();

void buildFoot();

Person buildPerson();

}

ConcreteBuilder

public class ManBuilder implements PersonBuilder {

Person person;

public ManBuilder() {

person = new Man();

}

public void buildbody() {

person.setBody("建造男人的身体");

}

public void buildFoot() {

person.setFoot("建造男人的脚");

}

public void buildHead() {

person.setHead("建造男人的头");

}

public Person buildPerson() {

return person;

}

}

Dirictor

public class PersonDirector {

public Person constructPerson(PersonBuilder pb) {

pb.buildHead();

pb.buildBody();

pb.buildFoot();

return pb.buildPerson();

}

}

Product

public class Person {

private String head;

private String body;

private String foot;

public String getHead() {

return head;

}

public void setHead(String head) {

this.head = head;

}

public String getBody() {

return body;

}

public void setBody(String body) {

this.body = body;

}

public String getFoot() {

return foot;

}

public void setFoot(String foot) {

this.foot = foot;

}

}

public class Man extends Person {

}

Test

publ*c class Test{

public static void main(String[] ar*s) {

PersonDirector pd = new PersonDirector();

Person person = pd.constructPerson(new ManBuilder());

System*out.println(person.getBody());

System.out.println(person.getFoot());

System.out.println(person.getHead());

}

}

result

建造男人的身体

建造男人的脚

建造男人的头
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.02.17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义
  • 类图
  • 建造者模式与工厂模式的区别
  • 例如
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档