《Java极简设计模式》第04章:建造者模式(Builder)

作者:冰河

星球:http://m6z.cn/6aeFbs

博客:https://binghe.gitcode.host

文章汇总:https://binghe.gitcode.host/md/all/all.html

源码地址:https://github.com/binghe001/java-simple-design-patterns/tree/master/java-simple-design-builder

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:用最简短的篇幅介绍建造者模式最核心的知识,理解建造者模式的设计精髓,并能够灵活运用到实际项目中,编写可维护的代码。

大家好,我是冰河~~

今天给大家介绍《Java极简设计模式》的第04章,建造者模式(Builder),用最简短的篇幅讲述设计模式最核心的知识,好了,开始今天的内容。

一、概述

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

二、适用性

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

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

三、参与者

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

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

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

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

四、类图

五、示例

Builder

java 复制代码
/**
 * @author binghe(微信 : hacker_binghe)
 * @version 1.0.0
 * @description Person对象的构造接口
 * @github https://github.com/binghe001
 * @copyright 公众号: 冰河技术
 */
public interface PersonBuilder {

    void buildHead();

    void buildBody();

    void buildFoot();

    Person buildPerson();
}

ConcreteBuilder

java 复制代码
/**
 * @author binghe(微信 : hacker_binghe)
 * @version 1.0.0
 * @description Person对象的构造器
 * @github https://github.com/binghe001
 * @copyright 公众号: 冰河技术
 */
public class ManBuilder implements PersonBuilder{
    Person person;

    public ManBuilder() {
        person = new Man();
    }

    @Override
    public void buildBody() {
        person.setBody("建造男人的身体");
    }

    @Override
    public void buildFoot() {
        person.setFoot("建造男人的脚");
    }

    @Override
    public void buildHead() {
        person.setHead("建造男人的头");
    }

    @Override
    public Person buildPerson() {
        return person;
    }
}

Director

java 复制代码
/**
 * @author binghe(微信 : hacker_binghe)
 * @version 1.0.0
 * @description Person对象的整体构造器
 * @github https://github.com/binghe001
 * @copyright 公众号: 冰河技术
 */
public class PersonDirector {

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

Product

java 复制代码
/**
 * @author binghe(微信 : hacker_binghe)
 * @version 1.0.0
 * @description Person对象
 * @github https://github.com/binghe001
 * @copyright 公众号: 冰河技术
 */
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;
    }
}
java 复制代码
/**
 * @author binghe(微信 : hacker_binghe)
 * @version 1.0.0
 * @description 创建一个男人类继承Person
 * @github https://github.com/binghe001
 * @copyright 公众号: 冰河技术
 */
public class Man extends Person{
}

Test

java 复制代码
package com.lyz.design.builder;

/**
 * 测试类
 * @author liuyazhuang
 *
 */
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

java 复制代码
/**
 * @author binghe(微信 : hacker_binghe)
 * @version 1.0.0
 * @description 测试类
 * @github https://github.com/binghe001
 * @copyright 公众号: 冰河技术
 */
public class Test {
    public static void main(String[] args) {
        PersonDirector pd = new PersonDirector();
        Person person = pd.constructPerson(new ManBuilder());
        System.out.println(person.getHead());
        System.out.println(person.getBody());
        System.out.println(person.getFoot());
    }
}

好了,今天就到这儿吧,相信大家对建造者模式有了全新的感悟,我是冰河,我们下期见~~

相关推荐
今天和Aboo结婚了吗36 分钟前
【Broker一重启消息没了:一次RabbitMQ非持久化+没开Confirm的血亏事故】
java·rabbitmq·messagequeue·bug排查
daidaidaiyu6 小时前
一文学习 工作流开发 BPMN、 Flowable
java
SuniaWang7 小时前
《Spring AI + 大模型全栈实战》学习手册系列 · 专题六:《Vue3 前端开发实战:打造企业级 RAG 问答界面》
java·前端·人工智能·spring boot·后端·spring·架构
sheji34167 小时前
【开题答辩全过程】以 基于springboot的扶贫系统为例,包含答辩的问题和答案
java·spring boot·后端
m0_726965988 小时前
面面面,面面(1)
java·开发语言
xuhaoyu_cpp_java9 小时前
过滤器与监听器学习
java·经验分享·笔记·学习
程序员小假9 小时前
我们来说一下 b+ 树与 b 树的区别
java·后端
Meepo_haha10 小时前
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
java·spring boot·后端
sheji341610 小时前
【开题答辩全过程】以 基于springboot的房屋租赁系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端