Java设计模式之创建型-建造者模式(UML类图+案例分析)

这篇具有很好参考价值的文章主要介绍了Java设计模式之创建型-建造者模式(UML类图+案例分析)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、基本概念

二、UML类图

三、角色设计 

四、案例分析

五、总结


一、基本概念

建造者模式是一种创建型设计模式,它使我们将一个复杂对象的构建步骤分离出来,使得同样的构建过程可以创建不同的表示。该模式的目的是将构建复杂对象的过程抽象化,从而减少代码的重复和复杂度。

在建造者模式中,我们通过Builder接口或抽象类定义了一个标准的构建流程,然后让不同的具体构造者按照这个标准来实现自己的构建流程。同时,我们还定义了一个指导者(Director)类,用于按照特定的顺序执行构建流程,从而完成对象的构建。

二、UML类图

Java设计模式之创建型-建造者模式(UML类图+案例分析),设计模式,Java,java,设计模式,建造者模式

三、角色设计 

角色 描述
产品 被建造的复杂对象
抽象建造者 定义了一个创建产品各个子部件的抽象接口
具体建造者 实现Builder接口,构建并组装各个部件
指导者 调用建造者接口完成复杂对象的创建,隔离了客户与对象的生产过程

四、案例分析

例如有如下一个场景:日常生活中手机也分为有基础入门、中端和高端旗舰机三个档次的手机,客户这时候提出了一个需求:我想购买一部基础入门机和一部高端旗舰机!客户是完全不需要知晓整部手机的生产过程,只需要传达给指挥者,指挥者通过对应的手机建造者去控制生产对应的手机即可,下面我们通过代码实现这个案例:

手机类:

包含了基础的核心处理器、内存和电池3个参数。

public class Phone {

    private String cpu;

    private String memory;

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getMemory() {
        return memory;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }

    public String getBattery() {
        return battery;
    }

    public void setBattery(String battery) {
        this.battery = battery;
    }

    private String battery;
}

建造者抽象类:

提供了一个基础的手机对象,建造核心处理器,内存和电池三个抽象方法,返回建造完毕的手机对象。

public abstract class Builder {

    protected Phone phone = new Phone();

    public abstract void buildCpu();

    public abstract void buildMemory();

    public abstract void buildBattery();

    public Phone builder(){
        return this.phone;
    }
}

一个基础手机实现抽象建造者类:

public class BasicPhoneBuilder extends Builder{


    @Override
    public void buildCpu() {
        System.out.println("麒麟980");
        phone.setCpu("麒麟980");
    }

    @Override
    public void buildMemory() {
        System.out.println("8G内存");
        phone.setMemory("8G内存");
    }

    @Override
    public void buildBattery() {
        System.out.println("22.5W快充");
        phone.setBattery("22.5W快充");
    }
}

一个高端手机实现建造者抽象类:

public class AdvancedPhoneBuilder extends Builder{


    @Override
    public void buildCpu() {
        System.out.println("麒麟9000");
        phone.setCpu("麒麟9000");
    }

    @Override
    public void buildMemory() {
        System.out.println("12G内存");
        phone.setMemory("12G内存");
    }

    @Override
    public void buildBattery() {
        System.out.println("66W快充");
        phone.setBattery("66W快充");
    }
}

创建一个指挥者,用于建造出不同类型手机:

public class Director {

    private Builder builder;

    public Director(Builder builder){
        this.builder = builder;
    }

    public Phone builder(){
        builder.buildCpu();
        builder.buildMemory();
        builder.buildBattery();
        return builder.builder();
    }
}

客户端:

public class Client {

    public static void main(String[] args) {
        Builder basicPhoneBuilder = new BasicPhoneBuilder();
        Phone basicPhone = new Director(basicPhoneBuilder).builder();

        Builder advancedPhoneBuilder = new AdvancedPhoneBuilder();
        Phone advancedPhone = new Director(advancedPhoneBuilder).builder();
    }
}

运行结果如下:

Java设计模式之创建型-建造者模式(UML类图+案例分析),设计模式,Java,java,设计模式,建造者模式

五、总结

优点:

1、将构建复杂对象的过程封装起来,简化了代码结构和逻辑,客户端不需要知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的过程可以创建出不同的产品对象。

2、每一个建造者都相对独立,和其他建造者没有关系,因此可以很方便的替换具体的建造者或者添加新的具体建造者,客户端使用不同的建造者可以获得不同的产品对象,系统扩展方便,符合“开闭原则”。

缺点:

1、添加新的部件需要修改抽象类和具体构造者的代码。

2、建造者模式所创建的产品都有很多的共同之处,组成部分相似,如果产品之间的差异性很大,则组成部分不同,不适合使用建造者模式,因此范围很局限。

应用场景:

1、相同的方法,不同的执行顺序,产生不同的事件结果时。

2、多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。

3、产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能。

4、初始化一个对象消耗的资源非常大,则可以通过建造者模式分步初始化。

符合的设计原则:

1、单一职责原则(Single Responsibility Principle)

建造者仅负责构建产品,产品仅负责描述自身,职责单一。

2、开闭原则(Open Closed Principle)

可以新增建造者而不影响已有代码,符合开闭原则。

3、里氏替换原则(Liskov Substitution Principle)

扩展新的建造者仍遵循相同接口,不影响客户端使用。

4、依赖倒转原则(Dependency Inversion Principle)

建造者和指挥者依赖抽象接口,不依赖具体实现类。

5、接口隔离原则(Interface Segregation Principle)

产品接口和建造者接口职责单一,不会强迫实现不需要的方法。

建造者模式将复杂对象的构建与表示分离,使得相同的构建过程可以创建不同表示。它是一步一步创建一个复杂对象的最佳模式。文章来源地址https://www.toymoban.com/news/detail-552371.html

到了这里,关于Java设计模式之创建型-建造者模式(UML类图+案例分析)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java设计模式之结构型-桥接模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 4.1、支付方式 4.2、支付渠道  五、总结 桥接模式(Bridge Pattern)是一种结构型设计模式,其主要目的是“将抽象部分与实现部分分离,使它们都可以独立地变化”。 桥接模式的核心思想是把抽象(abstraction)与实现

    2024年02月13日
    浏览(47)
  • Java设计模式之行为型-迭代器模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 迭代器模式是一种常用的设计模式,它主要用于遍历集合对象,提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 举个简单的比喻,聚合对象像一个存放苹果的篮子,迭代

    2024年02月16日
    浏览(45)
  • Java设计模式之行为型-责任链模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 4.1、在Java中实现 4.2、在SpringBoot中实现  五、总结  责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行发送。请求会被链上每个处理者处理,直到请求被处理完毕。该模式主要解决的是请求的发送者和

    2024年02月15日
    浏览(39)
  • Java设计模式之结构型-组合模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 4.1、基本实现 4.2、菜单遍历  五、总结  组合模式(Composite Pattern)又叫部分-整体模式,它通过将对象组合成树形结构来表示“整体-部分”的层次关系,允许用户统一单个对象和组合对象的处理逻辑。 角色 描述

    2024年02月16日
    浏览(50)
  • Java设计模式之行为型-访问者模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 访问者模式是一种对象行为型设计模式,它能够在不修改已有对象结构的前提下,为对象结构中的每个对象提供新的操作。 访问者模式的主要作用是把对元素对象的操作抽象出来封装到访问者类中,这样就

    2024年02月16日
    浏览(55)
  • Java设计模式之行为型-备忘录模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结  备忘录模式是一种行为型设计模式,它允许保存一个对象的内部状态到一个备忘录对象中,这样就可以在需要的时候恢复这个对象的状态了,同时又不违反封装性原则。 这个模式的核心就是备忘录对象,

    2024年02月16日
    浏览(38)
  • Java设计模式之结构型-享元模式(UML类图+案例分析)

    目录 一、基本概念 二、UML类图 三、角色设计 四、案例分析 4.1、基本实现 4.2、游戏角色 五、总结 享元模式是一种结构型设计模式,主要用于减少创建大量相似对象所占用的内存,它通过共享技术来有效支持大量细粒度的对象。 角色 描述 抽象享元角色 定义出对象的外部状

    2024年02月16日
    浏览(45)
  • Java设计模式之结构型-装饰器模式(UML类图+案例分析)

    目录 一、基本概念 二、UML类图 三、角色设计 四、代码实现 案例一 案例二  五、总结  装饰器模式是指不必在改变原有的类和不使用继承的情况下,动态扩展一个对象的功能。 角色 描述 抽象构件 是一个接口或者抽象类,定义我们最核心的对象 具体构件 抽象构件的实现,

    2024年02月11日
    浏览(35)
  • Java设计模式之UML类图

    UML图有很多种,但是并非必须掌握所有的UML图,才能完整系统分析和设计工作。一般说来,在UML图中,只要掌握类图、用例图、时序图的使用,就能完成大部分的工作。对于程序员来说,最频繁使用的莫过于类图。因此,这里我只讲解UML类图。 类图是面向对象系统建模中最常

    2024年02月03日
    浏览(42)
  • Java设计模式之责任链模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设计模式之责任链模式 OA系统采购审批需求 传统方案解决OA系

    2024年02月06日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包