前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈JAVA设计模式之——建造者模式(Builder)

浅谈JAVA设计模式之——建造者模式(Builder)

作者头像
冰河
发布2020-10-29 15:38:43
4810
发布2020-10-29 15:38:43
举报
文章被收录于专栏:冰河技术

一、概述

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

二、适用性

  • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
  • 当构造过程必须允许被构造的对象有不同的表示时。

三、参与者

  • Builder 为创建一个Product对象的各个部件指定抽象接口。
  • ConcreteBuilder 实现Builder的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示。提供一个检索产品的接口。
  • Director 构造一个使用Builder接口的对象。
  • Product 表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

四、类图

五、示例

Builder

代码语言:javascript
复制
package com.lyz.design.builder;
/**
 * Person对象的构造接口
 * @author binghe
 *
 */
public interface PersonBuilder {

    void buildHead();

    void buildBody();

    void buildFoot();

    Person buildPerson();
}

ConcreteBuilder

代码语言:javascript
复制
package com.lyz.design.builder;
/**
 * Person对象的构造器
 * @author binghe
 *
 */
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;
    }
}

Director

代码语言:javascript
复制
package com.lyz.design.builder;
/**
 * Person对象的整体构造器
 * @author binghe
 *
 */
public class PersonDirector {

    public Person constructPerson(PersonBuilder pb) {
        pb.buildHead();
        pb.buildBody();
        pb.buildFoot();
        return pb.buildPerson();
    }
}

Product

代码语言:javascript
复制
package com.lyz.design.builder;

/**
 * Person对象
 * @author binghe
 *
 */
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;
    }
}
代码语言:javascript
复制
package com.lyz.design.builder;
/**
 * 创建一个男人类继承Person
 * @author binghe
 *
 */
public class Man extends Person {

}

Test

代码语言:javascript
复制
package com.lyz.design.builder;

/**
 * 测试类
 * @author binghe
 *
 */
public class Test {
    public static void main(String[] args) {
        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

代码语言:javascript
复制
建造男人的身体
建造男人的脚
建造男人的头
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冰河技术 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、适用性
  • 三、参与者
  • 四、类图
  • 五、示例
    • Builder
      • ConcreteBuilder
        • Director
          • Product
            • Test
              • result
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档