java 设计模式--创建者模式

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

参考:Java常见设计模式总结

概念

概念理解一:将复杂对象的创建过程分解在不同的方法中,不同的创建过程组装成不同对象。对象的创建与产品本身分离开,使得对象的创建过程更加清晰。例如:旅游套餐售卖场景。
一个套餐大概会由机票、车票、酒店、景点门票组成。
套餐A: 机票1 + 酒店1 + 景点门票1
套餐B: 车票1 + 景点门票2
套餐C: 机票1 + 酒店1
等等
概念理解二:如果对象的构造的入参十分复杂时,构造对象需要转为链式写法时
第三方库举例:
1、由于产品的构造函数参数太多或者组合方式太多
Mybaitis 和 SqlSessionFactoryBuilder
2、将 set 方法转成链式写法
StringBuilder,StringBuffer.append()方法

java 设计模式--创建者模式

抽象建造者 Builder:相当于建筑蓝图,声明了创建 Product 对象的各个部件指定的抽象接口。
具体建造者 ConcreteBuilder:实现Builder抽象接口,构建和装配各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
指挥者 Director:构建一个使用 Builder 接口的对象。主要有两个作用,一是隔离用户与对象的生产过程,二是负责控制产品对象的生产过程。
产品角色 Product:被构造的复杂对象。ConcreteBuilder 创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

抽象构造者

@Data
public abstract class Builder {
    Package pack = new Package();
    public abstract void buildAirTicket();
    public abstract void buildHotel();
    public abstract void buildTripTicket();
    public abstract void buildCarTicket();

    public Package getPack(){
        return pack;
    }
}

套餐A具体的构造者 PackageAConcreteBuilder

@Data
public class PackageAConcreteBuilder extends Builder {
//    套餐A: 机票1 + 酒店1 + 景点门票1
    @Override
    public void buildAirTicket() {
        AirTicket airTicket1 = new AirTicket(1000, 999, "机票1", "0001", 200);
        pack.setAirTicket(airTicket1);
    }

    @Override
    public void buildHotel() {
        Hotel hotel1 = new Hotel(300, 999, "酒店1", 2);
        pack.setHotel(hotel1);
    }

    @Override
    public void buildTripTicket() {
        TripTicket tripTicket1 = new TripTicket(50, 9999, "景点门票1");
        pack.setTripTicket(tripTicket1);
    }

    @Override
    public void buildCarTicket() {
        return;
    }

    @Override
    public Package getPack() {
        return super.getPack();
    }
}

套餐B具体的构造者 PackageBConcreteBuilder

@Data
public class PackageBConcreteBuilder extends Builder{
//    套餐B: 车票1 + 景点门票2
    @Override
    public void buildAirTicket() {

    }

    @Override
    public void buildHotel() {

    }

    @Override
    public void buildTripTicket() {
        TripTicket tripTicket2 = new TripTicket(30, 9999, "景点门票2");
        pack.setTripTicket(tripTicket2);
    }

    @Override
    public void buildCarTicket() {
        CarTicket carTicket1 = new CarTicket(50, 9999, "车票1","0876");
        pack.setCarTicket(carTicket1);
    }

    @Override
    public Package getPack() {
        return super.getPack();
    }
}

套餐模型对象类 Package 相当于图中的 Product

@Data
public class Package {
    AirTicket airTicket;
    Hotel hotel;
    TripTicket tripTicket;
    CarTicket carTicket;

    public Package() {
    }

    public Package(AirTicket airTicket, Hotel hotel, TripTicket tripTicket, CarTicket carTicket) {
        this.airTicket = airTicket;
        this.hotel = hotel;
        this.tripTicket = tripTicket;
        this.carTicket = carTicket;
    }
}

构造者

@Data
public class SystemDirector {
    private Builder builder;

    public void setBuilder(Builder builder){
        this.builder = builder;
    }
    public Package ConcreteBuilder(){
        builder.buildAirTicket();
        builder.buildHotel();
        builder.buildCarTicket();
        builder.buildTripTicket();

       return builder.getPack();
    }
}

如何使用文章来源地址https://www.toymoban.com/news/detail-498860.html

public static void main(String[] args){
        SystemDirector systemDirector = new SystemDirector(); // 指挥者
        PackageAConcreteBuilder packageABuilder = new PackageAConcreteBuilder();
        PackageBConcreteBuilder packageBBuilder = new PackageBConcreteBuilder();

        systemDirector.setBuilder(packageABuilder);// 指挥操作套餐A
        Package packageA = systemDirector.ConcreteBuilder();//套餐A的具体构造者创造对象     log.info("packageA,airTicket:{},hotel:{},tripTicket:{}",packageA.airTicket.getName(),
                packageA.hotel.getName(),packageA.tripTicket.getName());

        systemDirector.setBuilder(packageBBuilder);// 指挥操作套餐B
        Package packageB = systemDirector.ConcreteBuilder();//套餐B的具体构造者创造对象
        log.info("packageB,carTicket:{},tripTicket:{}",packageB.carTicket.getName(), packageB.tripTicket.getName());
    }

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

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

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

相关文章

  • 【设计模式】builder 创建者设计模式详解(包含电商应用场景及代码示例)

    在常见的设计模式中,“Builder” 通常是指一种设计模式,而不是具体的类或方法。Builder 模式是一种创建型设计模式,其目的是通过提供一个独立的构建器类来构建一个复杂对象。 建造者模式 (Builder Pattern) 是一种创建型设计模式,它的主要目标是为了将一个复杂对象的构

    2024年01月21日
    浏览(49)
  • 【创建者模式】工厂模式

    根据百科的定义,工厂模式是“工厂是用于创建其他对象的对象”。 以咖啡店为例,设计一个咖啡类Coffee,并定义其两个子类(美式咖啡AmericanCoffee和拿铁咖啡LatteCoffee);再设计一个咖啡店类CoffeeStore,咖啡店具有点咖啡的功能。 在上面的示例中,我们没有使用任何模式并

    2023年04月11日
    浏览(73)
  • 【新手上路】如何在Web3时代成为XR创建者

    目录 0 XR在Web3里的作用 1 XR的概念、特征、技术、设备、平台、应用和工具 1.1 VR的概念、特征和技术 1.2 AR的概念、特征和技术 1.2 XR的设备、平台、应用和工具 2 选择XR的方法 2.1 何时使用VR 2.2 何时使用AR 3 开发XR作品的4个步骤 4 成为XR构建者的路径 4.1 三种开发XR作品的方式

    2024年02月10日
    浏览(44)
  • 【Java 设计模式】创建型之建造者模式

    在软件开发中,建造者模式是一种创建型设计模式, 它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示 。建造者模式通常包括一个指导者(Director)类和多个建造者(Builder)类,指导者负责组织建造者的构建过程,而建造者负责具体的构建步

    2024年01月21日
    浏览(56)
  • 【Java 设计模式】创建型之单例模式

    在软件开发中,单例模式是一种常见的设计模式, 它确保一个类只有一个实例,并提供一个全局访问点 。单例模式在需要控制某些资源,如数据库连接池、线程池等共享资源的情况下非常有用。在本文中,我们将介绍 Java 设计模式中的单例模式,了解其实现方式、使用场景

    2024年01月18日
    浏览(55)
  • 【Java 设计模式】创建型之抽象工厂模式

    在软件开发中,抽象工厂模式是一种常见的创建型设计模式, 它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 。抽象工厂模式的核心思想是将一组相关的产品组合成一个工厂,客户端通过工厂接口创建一系列产品。在本文中,我们将介绍 Jav

    2024年01月17日
    浏览(80)
  • 【Java 设计模式】创建型之工厂方法模式

    在软件开发中,工厂方法模式是一种常见的创建型设计模式, 它提供了一种将对象的实例化延迟到子类的方法 。工厂方法模式通过定义一个创建对象的接口,但是让子类决定实例化哪个类。在本文中,我们将介绍 Java 设计模式中的工厂方法模式,了解其定义、使用场景以及

    2024年01月17日
    浏览(65)
  • Java23种设计模式-创建型模式之单例模式

    单例模式 (Singleton Pattern):通过单例模式的方法创建的 类在当前进程中只有一个实例 (根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例),该类负责 创建自己的对象 ,同时 确保只有单个对象 被创建。 注 : 1、单例类 只能 有 一个实例 。

    2024年04月26日
    浏览(54)
  • [设计模式Java实现附plantuml源码~创建型] 产品族的创建——抽象工厂模式

    前言: 为什么之前写过Golang 版的设计模式,还在重新写 Java 版? 答:因为对于我而言,当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言,更适合用于学习设计模式。 为什么类图要附上uml 因为很多人学习有做笔记的习惯,如果单纯的只是放一张图片,那

    2024年01月22日
    浏览(65)
  • 【java设计模式】创建型模式介绍(工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式)

    简介 本文介绍Java设计模式中创建型模式的五种 一、工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 工厂模式提供了一种将对象的实例化过程封装在工厂类中的方式。通过使用工

    2024年02月16日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包