设计模式快速学习(四)建造者模式

简介: 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

优点
  1. 建造者独立,易扩展。
  2. 便于控制细节风险。
缺点
  1. 产品必须有共同点,范围有限制。
  2. 如内部变化复杂,会有很多的建造类。

角色介绍

建造者模式有四个角色

  1. Product(产品类):要建造的对象
  2. builder(抽象建造者):规范建造对象的组成成分,但不具体创建。
  3. ConcreteBuilder(具体建造者):根据抽象建造者规范的组成成分来具体创建,并返回建造对象(产品类)实例。
  4. Director(指导者):调用具体建造者来建造各个部分,指导者只需要关注建造顺序,而不需要关注各成分(产品类属性)具体信息。

执行顺序:
Director->builder->ConcreteBuilder
最后返回Product

产品类

要建造的对象

public class Phone {
    /**
     * 处理器
     */
    private String cpu;
    /**
     * 屏幕
     */
    private String screen;
    /**
     * 相机
     */
    private String camera;

getter and setter...

抽象建造者

规范建造对象的组成成分,但不具体创建。

public interface PhoneBuilder {
    void buildScreen();
    void buildCpu();
    void buildCamera();

    Phone buildPhone();
}

具体建造者

根据抽象建造者规范的组成成分来具体创建,并返回建造对象(产品类)实例。

public class ConcreteBuilder implements PhoneBuilder{
    public Phone phone;
    public ConcreteBuilder() {
        phone = new Phone();
    }

    @Override
    public void buildScreen() {
        phone.setScreen("三星OLED屏幕");
    }

    @Override
    public void buildCpu() {
        phone.setCpu("骁龙845");
    }

    @Override
    public void buildCamera() {
        phone.setCamera("SONY");
    }

    @Override
    public Phone buildPhone() {
        return this.phone;
    }
}

指导者

调用具体建造者来建造各个部分,指导者只需要关注建造顺序,而不需要关注各成分(产品类属性)具体信息。

public class Direct {
    public Phone constructMi8(PhoneBuilder phoneBuilder){
        phoneBuilder.buildCamera();
        phoneBuilder.buildCpu();
        phoneBuilder.buildScreen();
        return phoneBuilder.buildPhone();
    }
}

测试

public class Main {
    public static void main(String[] args) {
        Direct direct = new Direct();
        Phone phone = direct.constructMi8(new ConcreteBuilder());
        System.out.println(phone);
    }
}
Phone{cpu='骁龙845', screen='三星OLED屏幕', camera='SONY'}

与抽象工厂模式区别

建造者模式和抽象工厂模式是很像的(都是创建产品类实例),建造者模式比它多了一个指导者的角色,所以它们的最大区别在于

建造者模式只需要关注产品类建造的顺序,而不需要关注其具体信息。

而抽象工厂模式需要关注其具体信息去创建产品类。

抽象工厂模式顺风车:设计模式快速学习(二)抽象工厂模式

相关文章
|
2月前
|
设计模式 算法
设计模式--建造者模式 builder
这篇文章通过一个电脑购买的例子,详细解释了建造者模式的四个角色(产品类、抽象构建者、实体构建类和指导者类),并提供了相应的代码实现,阐述了建造者模式在设计复杂对象时的应用和优势。
设计模式--建造者模式 builder
|
11天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
2月前
|
设计模式 算法 Java
Java设计模式-建造者模式(6)
Java设计模式-建造者模式(6)
|
3月前
|
设计模式 XML 存储
【四】设计模式~~~创建型模式~~~建造者模式(Java)
文章详细介绍了建造者模式(Builder Pattern),这是一种创建型设计模式,用于将复杂对象的构建与其表示分离,允许分步骤创建一个复杂的对象而无需指定其内部的具体构造细节。通过定义抽象建造者、具体建造者、指挥者和产品角色,建造者模式允许通过相同的构建过程创建不同的产品表示,提高了系统的灵活性和扩展性。
|
5月前
|
设计模式 存储 算法
设计模式学习心得之五种创建者模式(2)
设计模式学习心得之五种创建者模式(2)
45 2
|
4月前
|
设计模式 JavaScript
js设计模式【详解】—— 建造者模式
js设计模式【详解】—— 建造者模式
54 0
|
5月前
|
设计模式
设计模式-05建造者模式(Builder Pattern)
设计模式-05建造者模式(Builder Pattern)
|
5月前
|
设计模式 Java
Java设计模式:建造者模式之经典与流式的三种实现(四)
Java设计模式:建造者模式之经典与流式的三种实现(四)
|
5月前
|
设计模式 Java
Java设计模式之建造者模式详解
Java设计模式之建造者模式详解
|
5月前
|
设计模式 Java
设计模式之建造者模式
设计模式之建造者模式

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    43
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    50
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    58
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    38
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    63
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    58
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    42
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    50
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    110
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    78
  • 下一篇
    无影云桌面