当前位置: 首页 > article >正文

【GoF23种设计模式】01_建造者模式

文章目录

  • 前言
  • 一、基本概念
  • 二、使用步骤


前言

提示:设计者模式有利于提高开发者的编程效率和代码质量:

GoF(Gang of Four,四人帮)设计模式由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者合著,介绍了23种经典的设计模式。
分为三大类:创建型模式、结构型模式和行为型模式。


提示:以下是本篇文章正文内容,下面案例可供参考

一、基本概念

建造者模式是一种创建型设计模式,它允许你一步一步构造对象,并且只有在所有必要的部分都准备好之后才返回最终的对象。

这种模式非常有用,特别是在构建复杂的对象时,可以避免大量的构造函数参数,同时也使得代码更加清晰易读。

二、使用步骤

下面是一个简单的例子,展示如何使用建造者模式来创建一个Meal对象,这个对象可能包含多种食物和饮料。

首先定义 Meal 类:

public class Meal {
    private String mainCourse;
    private String sideDish;
    private String drink;
    private String dessert;

    // 私有构造器,防止直接实例化
    private Meal(MealBuilder builder) {
        this.mainCourse = builder.mainCourse;
        this.sideDish = builder.sideDish;
        this.drink = builder.drink;
        this.dessert = builder.dessert;
    }

    @Override
    public String toString() {
        return "Meal{" +
                "mainCourse='" + mainCourse + '\'' +
                ", sideDish='" + sideDish + '\'' +
                ", drink='" + drink + '\'' +
                ", dessert='" + dessert + '\'' +
                '}';
    }

    // 内部静态类,作为建造者
    public static class MealBuilder {
        private String mainCourse;
        private String sideDish;
        private String drink;
        private String dessert;

        public MealBuilder mainCourse(String mainCourse) {
            this.mainCourse = mainCourse;
            return this;
        }

        public MealBuilder sideDish(String sideDish) {
            this.sideDish = sideDish;
            return this;
        }

        public MealBuilder drink(String drink) {
            this.drink = drink;
            return this;
        }

        public MealBuilder dessert(String dessert) {
            this.dessert = dessert;
            return this;
        }

        // 构建最终的 Meal 对象
        public Meal build() {
            return new Meal(this);
        }
    }
}

使用 MealBuilder 创建 Meal 对象:

public class Client {
    public static void main(String[] args) {
        // 使用建造者模式创建 Meal 对象
        Meal meal = new Meal.MealBuilder()
                .mainCourse("牛排")
                .sideDish("薯条")
                .drink("可乐")
                .dessert("冰淇淋")
                .build();

        System.out.println(meal);
    }
}

在这个例子中,Meal 类是最终要构建的对象,而 MealBuilder 是用来构建 Meal 实例的内部类。

通过调用 MealBuilder 的方法(如 mainCourse 和 sideDish),我们可以逐步设置 Meal 的各个属性。

最后,当我们调用 build() 方法时,就会创建一个新的 Meal 对象。

总结:
这种方式的好处在于,即使 Meal 类有很多属性,我们也不需要为每个组合都提供一个构造函数,而是可以根据需要逐步设置属性,这使得代码更加灵活和易于维护。


http://www.kler.cn/a/410727.html

相关文章:

  • 【prism】遇到一个坑,分享!
  • 【人工智能】PyTorch、TensorFlow 和 Keras 全面解析与对比:深度学习框架的终极指南
  • 10大排序总结
  • 深入浅出分布式缓存:原理与应用
  • HTML 表单实战:从创建到验证
  • Oracle 单实例、RAC 集群数据库修改 REDO 日志组
  • 40_U²-Net网络详解
  • 【shodan】(五)网段利用
  • 跨标签通信的几种方式
  • Sickos1.1 详细靶机思路 实操笔记
  • 【人工智能】Python与Scikit-learn的模型选择与调参:用GridSearchCV和RandomizedSearchCV提升模型性能
  • 音视频处理PCM相关概念:帧(Frame)、周期(Period Size)、量化、 声道数(Channels)、采样位数(Sample Bits)、采样频率
  • 鸿蒙操作系统(HarmonyOS)开发的初学者了解和入门
  • goframe开发一个企业网站 在vue-next-admin 显示验证码 19
  • Android 底部导航栏未选中菜单项显示文本title
  • 移动端,树形数据的一种展示形式
  • 嵌入式硬件设计:从概念到实现的全流程
  • python中的把列表组合成字典
  • 【MySQL实战45讲笔记】基础篇—— 全局锁和表锁
  • linux mount nfs开机自动挂载远程目录
  • C++ Qt QTextBrowser使用方法总结
  • FPGA实现PCIE3.0视频采集转10G万兆UDP网络输出,基于XDMA+GTH架构,提供工程源码和技术支持
  • 亚太杯数学建模A题——复杂场景下水下图像增强技术的研究 思路(更新部分)
  • docker创建vue镜像
  • 鸢尾花植物的结构认识和Python中scikit-learn工具包的安装
  • [debug]不同的window连接ubuntu的vscode后无法正常加载kernel