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

设计模式简述(五)建造者模式

建造者模式

  • 描述
    • 基本要素
    • 协调类
    • 使用

描述

建造者模式属于创造型设计模式。
通常用于构建一系列复杂对象,这些对象有一定的共性。
我们可以通过不同的建造者,组装不同的对象

与工厂模式的区别,建造者模式更侧重与基于基础构件组装而非直接创建基础构件

基本要素

  • 定义产品类
public class Product {
    public void method() {
	// code
    }
}
  • 定义抽象建造者
public abstract class Builder {
    public abstract void process();

    public abstract Product build();
}
  • 定义具体建造者
public class ABuilder extends Builder {
    Product product = new Product();

    @Override
    public void process() {
        product.method1();
        product.method2();
    }

    @Override
    public Product build() {
        return product;
    }
}

public class BBuilder extends Builder {
    Product product = new Product();

    @Override
    public void process() {
        product.method1();
        product.method3();
    }

    @Override
    public Product build() {
        return product;
    }
}

协调类

与工厂方法类似,为了避免调用方与众多建造者子类直接交互。
我们可以定义一个中间协调类

public class BuilderCoordinator {
    private Builder aBuilder = new ABuilder();
    private Builder bBuilder = new BBuilder();

    public Product AProduct() {
        aBuilder.process();
        return aBuilder.build();
    }
    public Product BProduct() {
        aBuilder.process();
        return aBuilder.build();
    }
}

使用

public class Sample {
    public static void main(String[] args) {
        BuilderCoordinator coordinator = new BuilderCoordinator();
        Product ap = coordinator.AProduct();
        Product bp = coordinator.BProduct();
    }
}
http://www.dtcms.com/a/113448.html

相关文章:

  • 小小模拟器 1.2.1 | 免登录无广告,畅玩经典游戏内置金手指
  • 【深度学习新浪潮】视觉与多模态大模型文字生成技术研究进展与产品实践
  • 字节二面:TCP 链接中,接收方不调用 recv,会出现什么情况?——拆解大厂面试题(校招)
  • css flex布局 让子元素在最右边技巧
  • 【移动计算】:AndroidStudio安装和项目搭建【2019:版本3.5.2】
  • 【书籍】DeepSeek谈《人月神话》
  • mofish软件(MacOS版本)手动初始化
  • Vue 3 生命周期钩子详解
  • 记录_文件操作
  • C# 程序脱壳,去除强签名StrongNameRemove
  • python加载训练好的模型并进行叶片实例分割预测
  • B树和B+树的区别(B Tree B+ Tree)
  • Windows扫描功能在哪?如何打开?如何使用自带的扫描程序进行扫描
  • Python实现ssh自动连接
  • 对比学习中的NCE(Noise-Contrastive Estimation)和InfoNCE(SimCLR)损失函数+案例(附SimSiam分析)
  • C-S模式之实现一对一聊天
  • 【MATLAB第113期】基于MATLAB的EFAST扩展傅里叶幅度敏感性分析方法(有目标函数)
  • Linux 下 日志系统搭建全攻略
  • 【算法】滑动窗口
  • 使用 ResUNet++、增强对结直肠息肉分割的图像识别综合研究
  • 【嵌入式学习5】PyQt5注册界面 - 自定义信号和槽
  • Unity:Simple Follow Camera(简单相机跟随)
  • 讯飞语音听写(流式版)开发指南
  • BMC PSL function(42)-floor()
  • 第四章 react-redux,@reduxjs/toolkit依赖,学习
  • MySQL慢查询日志通俗指南
  • Java三大循环结构深度解析:从入门到精通的实践指南
  • 一.数据库基础知识
  • 大衣的旅行--前缀和+二分
  • 特殊的质数肋骨--dfs+isp