创建型模式-建造者模式理解

2023-10-27

1.前言:

首先建造者模式适合下面的场景,进行使用:

假设不同的对象有着基本的共同特点、或者配合前端进行页面布局,进行构建一个复杂的对象;

那么可以参考工厂方法模式进行抽取对象,并进行解耦,达到一个设计符合要求的对象的过程;

eg:1

保险产品,前端页面,所有的、或者说某种类型的保险产品,页面逻辑或者说是布局都是基本一致;

i例如,前端页面布局框架拆分固定的几个模块,以及不同的模块有不同的参数结构进行解析后台参数,不同的产品在整体满足要求情况下,不同页面模块上面有着不同的效果,也可以用建造者模式完成构建这个整体对象

eg:2

l例如游戏,简单点,不同的游戏任务,有着基本的公共模块,头部、手臂、腿部、身体等,不同的游戏人物,,满足整体要求的情况下,不同的部分展示不同的效果,这时候也可以使用建造者模式,完成构建这个整体对象的目标,

。。。等等

简单点就是,建造者模式构建对象,适用于,满足一定公共特征、或者特点,只是细微之处不同时,可以使用这个模块进行构建一个复杂的对象。

2.建造者模式模块详解

在建造者模式结构图中包含如下几个角色

● Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方法,一类方法是buildPartX(),它们用于创建复杂对象的各个部件;另一类方法是getResult(),它们用于返回复杂对象。Builder既可以是抽象类,也可以是接口。

●ConcreteBuilder(具体建造者):它实现了Builder接口,实现各个部件的具体构造和装配方法,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。

●Product(产品角色):它是被构建的复杂对象,包含多个组成部件,具体建造者创建该产品的内部表示并定义它的装配过程。

● Director(指挥者):指挥者又称为导演类,它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其construct()建造方法中调用建造者对象的部件构造与装配方法,完成复杂对象的建造。客户端一般只需要与指挥者进行交互,在客户端确定具体建造者的类型,并实例化具体建造者对象(也可以通过配置文件和反射机制),然后通过指挥者类的构造函数或者Setter方法将该对象传入指挥者类中。
 

3.demo设计


/**
 * 复杂产品对象类
 */
@Data
class Product {
    /**
     * 类型
     */
    private  String type;
    /**
     * 参考指标
     */
    private  String index;

    //等等

}

/**
 * 产品构建抽象类:抽象建造者
 */
abstract class ProductBuilder {

    protected  Product product = new Product();

    public  abstract void buildType();
    public  abstract void buildIndex();

    //工厂方法,返回一个完整的游戏角色对象

    public product createProduct() {
        return product;
    }
}

/**
 * 产品1生成实现类:具体建造者
 */
class Pro1Builder extends ProductBuilder {

    public  void buildType() {
        product.setType("产品类型1");
    }

    public  void buildIndex() {
        product.setIndex("沪深指标1");
    }

}

/**
 * 指挥者:具体service构建对象调用
 */
class Producter1Control implements  XXX某某业务api {
    
    public void business() {
        Pro1Builder pro1Builder = new Pro1Builder();
        pro1Builder.buildType();
        pro1Builder.buildIndex();
        //此处已完成初步构建,大致思路如此展示

    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建型模式-建造者模式理解 的相关文章

  • steam"无法连接到更新服务器"的问题

    问题现象如下图所示 在打开steam游戏时出现了上述问题 无法正常游戏 不光如此steam官网也无法正常显示 只有部分文字和图片 样式缺失 打开chrome的F12开发者工具 进入network模块监视可发现大量的请求并没有被响应 甚至没有

随机推荐

  • SQL语句执行顺序

    首先了解一下sql语句的执行步骤 1 语法分析 分析语句的语法是否符合规范 衡量语句中各表达式的意义 2 语义分析 检查语句中涉及的所有数据库对象是否存在 且用户有相应的权限 3 视图转换 将涉及视图的查询语句转换为相应的对基表查询语句 4
  • 软件测试必看!5分钟掌握sql查询的聚合函数

    数据查询操作之排序 语法格式 select from 表名 order by 字段名 asc desc 重点 1 字段名可以有多个 如果字段名1 相同 再按照字段名2排序 2 默认情况下按照从小到大去排列 3 asc 就是从小到大排列 de
  • 【图论】—— 有向图的强连通分量

    给定有向图 若存在 满足从 出发能到达 中所有的点 则称 是一个 流图 Flow Graph 记为 其中 称为流图的源点 在一个流图 上从 进行深度优先遍历 每个点只访问一次 所有发生递归的边 换言之 从 到 是对 的第一次访问 构成一棵以
  • Java中Juc并发编程基础

    1 什么是JUC 就是java util concurrent并发包下面使用的工具包 1 1 线程和进程 进程 是一个程序 QQ exe 网易云音乐 大数据领域的NameNode其实就是程序的集合 一个进程往往可以包含多个线程 至少包含一个
  • 同步和异步

    同步和异步通常用来形容方法的调用方式 同步方法表明调用一旦开始 调用者必须等待方法执行完成 才能继续执行后续方法 异步方法表明 方法一旦开始 立即返回 调用者无需等待其中方法执行完成 就可以继续执行后续方法 通常我们写的方法都是同步方法 方
  • 使用Nginx解决跨域问题

    目录 使用Nginx解决跨域问题 1 修改浏览器 客户端访问地址 2 在nginx conf配置文件需配置server 3 在Nginx中配置客户端访问的接口 按照规则或通配 并设置被代理的服务器 4 在Nginx中统一配置客户端访问的头部
  • java实时获取汇率

    1 分享三个觉得挺不错的汇率api 1 每小时免费50次查询配额 NOWapi 2 0 1元2000次 年 阿里云 汇率api 3 每天免费100次查询配额 需要实名认证 聚合科技 如果只是针对很少外币获取汇率的话 个人推荐去阿里云购买 毕
  • Java中使用Jar包时读取当前jar文件所在的目录工具

    在实际使用中 jar包所放的位置是不一定的所以要动态获取当前目录 package com gj5u publics util import java io File 获取打包后jar的路径信息 author Rex public class
  • angularJs摸态框实例加详细注解

  • mos 多路模拟电子开关_同步四开关 BuckBoost 180W 模块电源

    点击上方 21Dianyuan 关注我们 本文是 21Dianyuan 社区 原创 技术文章 作者 xueyiranpiao 感谢作者的辛苦付出 本电源主要应用于电池充电 电池为8串磷酸铁锂 10000mAH 0 6C 充电 也可以用于其它
  • Mybatis底层源码分析(最详细的版本)

    Mybatis底层源码分析 最详细的版本 1 概要介绍 MyBatis 是一款优秀的持久层框架 也是当前最流行的java持久层框架之一 它内部封装了jdbc 使开发 者只需要关注sql语句本身 而不需要花费精力去处理加载驱动 创建连接 创建
  • 网络编程知识预备(2) ——TCP三次握手与四次挥手、流量控制(滑动窗口)、拥塞控制、半连接状态、2MSL

    参考 浅显易懂的三次握手与四次挥手 作者 丶PURSUING 发布时间 2021 03 19 09 33 20 网址 https blog csdn net weixin 44742824 article details 114990198
  • python3 面向对象_Python3快速入门(六)——Python3面向对象

    Python3快速入门 六 Python3面向对象 一 面向对象技术简介 1 面向对象简介 面向对象编程 Object Oriented Programing OOP 是一种编程思想 OOP把对象当成程序的一个基本单元 一个对象包含数据和操
  • antd date-picker 默认时间设置问题

    一 官网给出的例子
  • Python编程:通讯录(文件读取)

    描述 读取附件中的csv文件 通讯录信息 放入字典中 后两项以列表形式做为字典的值 并依次输出其中的信息 文件内数据不需要修改 输出时数据之间以空格间隔 编码格式使用GBK 输入 A 时 按行输出文件信息 输入 D 时 直接输出字典内容 输
  • vue3 props属性基本使用梳理

    前言 vue2中props属性的使用是比较统一的基本就一种方式 但是vue3中其实方式是比较多的 因此就打算梳理一下 会按照选项式和组合式进行梳理 包括属性的定义 取值以及属性的监听 应该是叫单文件组件和组合式API 不知道vue官方是根据
  • 递归->栈->队列面试题

    本文所有程序均已测试通过 测试结果图就不一个一个再截图了 读者可以自己copy验证一下 后期我会把思路图补出来 1 行走机器人问题 货架N个 机器人初始位置在pos 经过minutes分钟后到达T有多少种方案 行走机器人问题 货架N个 机器
  • 使用Hexo从0到1搭建个人博客详细教程(超详细,超简单)

    看完这篇 轻轻松松搭建个人博客 校花 班花 额 额 看了就会的博客搭建教程 一 搭建前的软件准备 git node 二 安装hexo 完成简单本地页面展示 三 将Hexo部署到Github 1 Github创建个人仓库 2 生成ssh添加到
  • WebStorm功能特点以及使用指南

    WebStorm功能特点以及使用指南 首先看看WebStorm合其他的IDE有什么特别之处 1 自动保存 不需要你一次又一次地ctrl s啦 所有的操作都直接存储 当然 万一键盘误操作也会被立即存储 不过我们可以通过本地版本控制解决这个问题
  • 创建型模式-建造者模式理解

    1 前言 首先建造者模式适合下面的场景 进行使用 假设不同的对象有着基本的共同特点 或者配合前端进行页面布局 进行构建一个复杂的对象 那么可以参考工厂方法模式进行抽取对象 并进行解耦 达到一个设计符合要求的对象的过程 eg 1 保险产品 前