《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());
    }
}

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

相关推荐
wuqingshun31415914 分钟前
大致说一下程序、进程、线程
java·运维·服务器·开发语言
资深web全栈开发15 分钟前
设计模式之访问者模式 (Visitor Pattern)
设计模式·访问者模式
wuqingshun31415917 分钟前
Object有哪些方法,大致说一下每个方法的含义?
java·开发语言·jvm
Coder_Boy_18 分钟前
Java高级_资深_架构岗 核心知识点(模块三:高并发)
java·spring boot·分布式·面试·架构
Coder_Boy_28 分钟前
Java高级_资深_架构岗 核心知识点全解析(模块二:Spring生态 架构岗必备)
java·spring boot·spring·架构
追随者永远是胜利者1 小时前
(LeetCode-Hot100)215. 数组中的第K个最大元素
java·算法·leetcode·职场和发展·go
晔子yy1 小时前
ReAct范式全流程详解
java·ai·react
渣瓦攻城狮1 小时前
互联网大厂Java面试实战:核心技术与场景分析
java·大数据·redis·spring·微服务·面试·技术分享
wuqingshun3141591 小时前
说一下JVM内存结构
java·开发语言·jvm
程序猿零零漆1 小时前
【Spring Boot开发实战手册】掌握Springboot开发技巧和窍门(六)创建菜单和游戏界面(下)
java·spring boot·游戏