软考 系统架构设计师系列知识点 —— 设计模式之创建者模式

本文内容参考:

软考 系统架构设计师系列知识点之设计模式(2)_系统架构设计师中考设计模式吗-CSDN博客

创建者模式_百度百科

建造者模式_百度百科

https://zhuanlan.zhihu.com/p/551870461

特此致谢!

Builder Pattern(创建者模式)

1. 概述

创建者模式,又称为构建者模式、建造者模式、构建器模式、生成器模式,英文名称(统一)为Builder Pattern。创建者模式是23种设计模式之一。其核心思想是:将一个"复杂对象的构建算法"与它的"部件及组装方式"分离,使得构件算法和组装方式可以独立应对变化;复用同样的构建算法可以创建不同的表示,不同的构建过程可以复用相同的部件组装方式。

更为直观简要地说,创建者将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

2. 实现原理

创建者模式能够分步骤创建复杂对象,允许使用相同的创建代码生成不同类型和形式的对象。

创建者模式所构建的对象一定是庞大而复杂的,并且一定是按照既定的制造工序将组件组装起来的,例如计算机、汽车、建筑物等。通常将负责构建这些大型对象的工程师称为建造者。

建造者模式又称为生成器模式,主要用于对复杂对象的构建、初始化,它可以将多个简单的组件对象按顺序一步步组装起来,最终构建成一个复杂的成品对象。

与工厂系列模式不同的是,建造者模式的主要目的在于把烦琐的构建过程从不同对象中抽离出来,使其脱离并独立于产品类与工厂类,最终实现用同一套标准的制造工序能够产出不同的产品。

3. 角色

创建者模式主要由五个部分构成:组装类、抽象创建者类、实现抽象创建者类的具体创建者类(ConcreateBuilder)、抽象产品和实现抽象产品的具体产品类。

  • Builder

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

  • ConcreteBuilder

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

  • Director

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

  • Product

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

4. 代码举例

  • Builder
java 复制代码
public interface PersonBuilder {
    void buildHead();
    void buildBody();
    void buildFoot();
    Person buildPerson();
}
  • ConcreteBuilder
java 复制代码
public class ManBuilder implements PersonBuilder {
    Person person;
    public ManBuilder() {
        person = new Person();
    }
    public void buildbody() {
        person.setBody("建造男人的身体");
    }
    public void buildFoot() {
        person.setFoot("建造男人的脚");
    }
    public void buildHead() {
        person.setHead("建造男人的头");
    }
    public Person buildPerson() {
        return person;
    }
}
  • Director
java 复制代码
public class PersonDirector {
    public Person constructPerson(PersonBuilder pb) {
        pb.buildHead();
        pb.buildBody();
        pb.buildFoot();
        return pb.buildPerson();
    }
}
  • Product
java 复制代码
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 {
}

测试代码:

java 复制代码
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());
    }
}
相关推荐
湘-枫叶情缘8 小时前
1990:种下那棵不落叶的树-第6集 圆明园的对话
linux·系统架构
书院门前细致的苹果9 小时前
设计模式大全:单例、工厂模式、策略模式、责任链模式
设计模式·责任链模式·策略模式
Light6013 小时前
智链未来:彭山物流园区从物理基建到数据智能体的全维度构建方案
人工智能·系统架构·数字孪生·智慧物流·实施路径·彭山项目
学历真的很重要15 小时前
【系统架构师】第二章 操作系统知识 - 第二部分:进程与线程(补充版)
学习·职场和发展·系统架构·系统架构师
C澒16 小时前
Vue 项目渐进式迁移 React:组件库接入与跨框架协同技术方案
前端·vue.js·react.js·架构·系统架构
BD_Marathon18 小时前
设计模式——依赖倒转原则
java·开发语言·设计模式
BD_Marathon18 小时前
设计模式——里氏替换原则
java·设计模式·里氏替换原则
jmxwzy18 小时前
设计模式总结
设计模式
roman_日积跬步-终至千里19 小时前
【系统架构设计师-综合知识】系统知识点说明
系统架构
子春一1 天前
Flutter for OpenHarmony:形状拼图:基于路径几何与空间吸附的交互式拼图系统架构解析
flutter·系统架构