首页 > 其他分享 >【设计模式与体系结构】创建型模式-建造者模式

【设计模式与体系结构】创建型模式-建造者模式

时间:2024-12-28 21:51:51浏览次数:1  
标签:builder String power frame 模式 vehicle 设计模式 public 体系结构

简介

建造者模式指的是将一个复杂对象的创建与表示分离,使得同样的创建过程可以创建不同的表示,分离了部件的构造(由 Builder 负责)和装配(由 Director 负责)。从而可以构造出复杂的对象,这个模式适用于某个对象的构建过程复杂的情况。由于实现了构建和装配的解耦,不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序。亦即实现构建算法和装配算法的解耦,实现更好的复用。用户只需要指定复杂对象的类型,而无需知晓其内部构造细节。

建造者模式的角色

  1. 抽象建造者(Builder)类:定义一套抽象的构建方法接口
  2. 具体建造者(Concrete Builder)类:实现Builder接口,完成复杂产品的每个部件的具体创建方法。在构建过程完成后,提供产品的实例
  3. 产品(Product)类:具体创建者要创建的复杂对象
  4. 指挥者(Director)类:调用具体建造者来建造产品的各个部分,在指挥者中不涉及具体产品的信息,只保证对象的各部分完整创建或按某个顺序创建

建造者模式的优点

  1. 创建者模式的封装性好,使用建造者模式可以有效地封装变化,在使用创建者模式的场景中,一般产品类和建造者类是比较稳定的。因此,将主要的业务逻辑封装在指挥者类中,会具有较好的稳定性
  2. 客户不必知晓产品内部的实现细节。将产品与产品的创建过程解耦,使得相同的创建过程,也可以创建不同的产品,也可以通过控制创建的顺序,来创建不同的产品
  3. 可以将产品的创建过程精细化,使得业务逻辑更加清晰
  4. 创建者模式可扩展性好。当有新的业务需求时,仅需要实现一个新的具体建造者类即可,无需更改原有代码,因此符合开闭原则

建造者模式的缺点

  1. 仅适用于产品类差异较小的情景

建造者模式的类图

正文

Vehicle 类是一个产品类,实际写为一个实体类即可,代码如下:

public class Vehicle {
    private String frame;//框架
    private String power;//能源

    public String getPower() {
        return power;
    }

    public void setPower(String power) {
        this.power = power;
    }

    public String getFrame() {
        return frame;
    }

    public void setFrame(String frame) {
        this.frame = frame;
    }
}

抽象建造者类 VehicleBuilder 代码如下:

public abstract class VehicleBuilder {
    protected Vehicle vehicle = new Vehicle();
    abstract void buildFrame(String frame);
    abstract void buildPower(String power);
}

具体建造者 NewEnergyVehicleBuilder 代码如下:

public class NewEnergyVehicleBuilder extends VehicleBuilder {
    @Override
    void buildFrame(String frame) {
        vehicle.setFrame(frame);
    }

    @Override
    void buildPower(String power) {
        vehicle.setPower(power);
    }
}

具体建造者 GasolineVehicleBuilder 代码如下:

public class GasolineVehicleBuilder extends VehicleBuilder {
    @Override
    void buildFrame(String frame) {
        vehicle.setFrame(frame);
    }

    @Override
    void buildPower(String power) {
        vehicle.setPower(power);
    }
}

指挥者 VehicleDirector 代码如下:

public class VehicleDirector {
    private VehicleBuilder builder;
    
    public VehicleDirector(VehicleBuilder builder) {
        this.builder = builder;
    }
    
    public Vehicle construct(String frame, String power) {
        builder.buildFrame(frame);
        builder.buildPower(power);
        return builder.vehicle;
    }
}

客户端代码如下:

private void testBuilderPattern() {
    VehicleBuilder builder = new GasolineVehicleBuilder();
    VehicleDirector vehicleDirector = new VehicleDirector(builder);
    Vehicle vehicle = vehicleDirector.construct("铝合金车架", "汽油");
    Log.i("BuilderPattern", "车架:" + vehicle.getFrame() + " 能源:" + vehicle.getPower());
    builder = new NewEnergyVehicleBuilder();
    vehicleDirector = new VehicleDirector(builder);
    vehicle = vehicleDirector.construct("碳纤维车架", "新能源电池");
    Log.i("BuilderPattern", "车架:" + vehicle.getFrame() + " 能源:" + vehicle.getPower());
}

运行效果如下:

标签:builder,String,power,frame,模式,vehicle,设计模式,public,体系结构
From: https://www.cnblogs.com/RomanLin/p/18618870

相关文章

  • Java设计模式 —— 【结构型模式】享元模式(Flyweight Pattern) 详解
    文章目录概述结构案例实现优缺点及使用场景概述享元模式也叫蝇量模式:运用共享技术有效地支持大量细粒度的对象;常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们......
  • 行为型设计模式2
    第四篇章行为型设计模式第五章状态模式一、简介概述从今天起,我们开始学习状态模式。在实际的软件开发中,状态模式并不是很常用,但是在能够用到的场景里,它可以发挥很大的作用。从这一点上来看,它有点像我们之前讲到的组合模式。一般不用,特定场景下使用。状态设计模式是一......
  • 行为型设计模式1
    第四篇章行为型设计模式在设计模式的世界里,23种经典设计模式通常被分为三大类:创建型、结构型和行为型。我们已经探讨了创建型和结构型设计模式,现在我们将开始学习行为型设计模式。正如创建型设计模式关注于对象创建的问题,结构型设计模式关注于类或对象的组合和组装问题,行......
  • 【电商系统】使用多种设计模式重构电商系统登录业务场景
    一、介绍在做业务功能开发的时候,每个程序员接触过最多的应该就是登录功能了,而一个登录功能有很多种登录交互的体现,当我们开始写登录代码的时候,前期能满足登录就行了,渐渐的系统中加入了不同业务需求的代码,以及每个登录需要特殊处理的参数,基本上我们要开发不同的接口和判断逻辑,对于......
  • JAVA设计模式总结之23种设计模式
    JAVA设计模式总结之23种设计模式|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|--------......
  • 原生 js 策略模式的理解
    原生js策略模式的理解策略模式(StrategyPattern)是一种行为设计模式,它允许在运行时根据不同的情况选择不同的算法或行为。该模式将算法封装成独立的策略对象,使得这些策略对象可以互相替换,从而使得算法的变化独立于使用算法的客户端。–来自查特著迪皮需求想要实现......
  • 智能问答模型升级,通义灵码新增图片多模态问答模式等新能力,项目秒上手
    通义灵码智能问答模型升级Qwen2.5Coder、输入交互升级并丰富上下文支持,全新支持多模态图片问答模式等。1.智能问答模型升级到最新Qwen2.5Coder智能问答升级到最新Qwen2.5Coder模型,编程性能和效率均实现大幅提升,其旗舰代码模型在十余项基准评测中均取得开源最佳成绩,成为......
  • 智能问答模型升级,通义灵码新增图片多模态问答模式等新能力,项目秒上手
    通义灵码智能问答模型升级Qwen2.5Coder、输入交互升级并丰富上下文支持,全新支持多模态图片问答模式等。1.智能问答模型升级到最新Qwen2.5Coder智能问答升级到最新Qwen2.5Coder模型,编程性能和效率均实现大幅提升,其旗舰代码模型在十余项基准评测中均取得开源最佳成绩,成为......
  • 单例模式
    单例模式是23种GOF模式中最简单,也是最经常出现的一种设计模式,也是面试官最常爱考的一种模式,为什么呢?因为单例模式足够简单,编写一个单例模式代码几分钟就能搞定,所以设计模式中面试官通常会选取单例模式作为出题。下面把单例模式分几个点,分别说说哪些地方面试官能考你?单例模式的......
  • 能省一点是一点 - 享元模式(Flyweight Pattern)
    享元模式(FlyweightPattern)享元模式(FlyweightPattern)享元模式(FlyweightPattern)概述享元模式包含的角色:享元模式应用场景talkischeap,showyoumycode总结享元模式(FlyweightPattern)享元模式(FlyweightPattern)是一种结构型设计模式,它主要用于减少创建大量细粒......