设计模式-创建型-构建者模式

构建者模式(Builder) WHAT 复杂应用: 当一个应用相关的类和对象参数逐步复杂化,数量逐步增加时,这个应用也会伴随着变得复杂。那么对于复杂对象的使用,为了尽可能降低后期维护成本,我们就不能按照传统的简易方式使用。 举个例子:如果我们的应用涉及到人,并且是国家级信息,需要记录一个人的所有信息,如全名、工作、薪资、家庭、教育等只要与该人相关的信息都需要记录。由于每个人的阅历背景都是不同的,正式由于这样的 阅读详情

基本概念:

  1. 构建者模式的定义
    将构建的过程和表示过程进行分离
    构建的过程:隐藏
    表示过程 : 开放

  2. 构建者模式的场景
    创建一个复杂的对象,同时改复杂对象有很多默认值(初始化)的时候,可以使用构建者模式。(典型:给对象设置可选参数)

  3. 构建者模式案例
    AlretDialog

  4. 构建者模式-UML类图结构
    4.1 分析角色划分
    角色一:产品
    角色二:抽象构建者
    角色三:具体构建者
    角色四:组装

    public class ComListDialog extends Dialog {

    public static Context mContext;
    
    private TextView btnCancel;
    
    private LinearLayout lyContents;
    
    private static List<CommonListMenuItem> btnMenu;
    
    public ComListDialog(@NonNull Context context) {
        super(context, R.style.common_dialog);
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Window win = getWindow();
        win.getDecorView().setPadding(0, 0, 0, 0);
        WindowManager.LayoutParams lp = win.getAttributes();
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.MATCH_PARENT;
        win.setWindowAnimations(R.style.listDialogWindowAnim);
        win.setAttributes(lp);
        setContentView(R.layout.common_list_dialog);
        setCanceledOnTouchOutside(true);
        setCancelable(true);
        findViewById(R.id.menu_base_content).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
        btnCancel = (TextView) findViewById(R.id.menu_cancel);
        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
        lyContents = (LinearLayout) findViewById(R.id.menu_content);
        if (btnMenu != null && btnMenu.size() > 0) {
            for (int i = 0; i < btnMenu.size(); i++) {
                View v = View.inflate(mContext, R.layout.common_list_dialog_item, null);
                if (i == 0) {
                    v.findViewById(R.id.menu_line).setVisibility(View.GONE);
                }
                TextView tv = (TextView) v.findViewById(R.id.menu_button);
                tv.setText(btnMenu.get(i).getName());
                tv.setTextColor(btnMenu.get(i).color);
                tv.setPadding(20, 0, 20, 0);
                tv.setGravity(Gravity.CENTER);
                if (btnMenu.get(i).textsize != 0) {
                    tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, btnMenu.get(i).textsize);
                }
                tv.setOnClickListener(btnMenu.get(i).getClickListener());
                lyContents.addView(v);
            }
        }
    }
    //  类似于Javabean
    public static class CommonListMenuItem {
        private String name;
        private View.OnClickListener clickListener;
        private int color = Color.parseColor("#209E89");
        private int textsize = 0;
        public CommonListMenuItem(String name, View.OnClickListener clickListener, int color) {
            this.name = name;
            this.clickListener = clickListener;
            this.color = color;
        }
        public CommonListMenuItem(String name, View.OnClickListener clickListener, int color, int textsize) {
            this.name = name;
            this.clickListener = clickListener;
            this.color = color;
            this.textsize = textsize;
        }
        public CommonListMenuItem(String name, int color, int textsize) {
            this.name = name;
            this.color = color;
            this.textsize = textsize;
        }
        public CommonListMenuItem(String name, View.OnClickListener clickListener) {
            this.name = name;
            this.clickListener = clickListener;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public View.OnClickListener getClickListener() {
            return clickListener;
        }
        public void setClickListener(View.OnClickListener clickListener) {
            this.clickListener = clickListener;
        }
    }
    //构建
    public static class Builder {
        public Builder(Context context) {
            mContext = context;
            btnMenu = new ArrayList<CommonListMenuItem>();
        }
        public Builder addMenuItem(CommonListMenuItem item) {
            btnMenu.add(item);
            return this;
        }
        public ComListDialog show() {
            if (null != mContext && (!(mContext instanceof Activity) || !((Activity) mContext).isFinishing())) {
                ComListDialog dialog = new ComListDialog(mContext);
                dialog.show();
                return dialog;
            }
            return null;
        }
    }
    @Override
    public void dismiss() {
        super.dismiss();
        btnMenu = null;
        mContext = null;
    }} 
    

这里写图片描述

优快云-构建者模式 1.介绍 1.1什么是构建者模式 创建者模式又叫建造者模式,是将一个复杂的对象的构建与它的表示分离,使 得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。 1.2适用场景: 隔离复杂对象的创建和使用,相同的方法,不同执行顺序,产生不同事件结果 多个部件都可以装配到一个对象中... 阅读详情

相关推荐

服务器安全配置:二、本地安全策略设置

密码最长使⽤期限”设置为“90天”;“⽤可以还原的加密来存储密码”设置为“禁⽤”“复位账户锁定计数器”设置为15分钟,贴图这里是我自己设置的时间,15分钟也够用,具体看自己需要。”网络访问: 不允许 SAM 帐户和共享的匿名枚举“设置为“已启用””网络访问: 限制对命名管道和共享的匿名访问“设置为“已启用””网络访问: 不允许匿名枚举 SAM 帐户“设置为“已启用”“关机: 允许系统在未登录的情况下关闭”设置为“已禁用”(1)交互式登录:不显示最后的⽤户名”设置为“已启⽤”

weixin_48825672的博客 3137

【玩转23种Java设计模式】创建型模式篇:构建者模式

将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。例如:电脑是显示器、键盘、鼠标等等组成使用的,但客户只需购买就可以了,无需关注产品内部组成的细节。

程序员云帆哥的博客 643

逆向工程师视角:拆解DataDome滑块验证码的3层防护机制与绕过思路

本文从逆向工程师视角,深入剖析DataDome滑块验证码的三层核心防护机制。第一层通过动态加密参数实现会话绑定与抗重放;第二层采集TLS指纹、鼠标轨迹动力学等多维行为数据进行一致性验证;第三层则是基于机器学习的后端异步风险决策引擎。文章不仅拆解了其技术原理,更分享了模拟、钩取等超越单纯工具调用的底层分析与绕过思路。

f6g7h8i9j的博客 733

设计模式-创建型模式-构建者模式 Builder

设计模式-创建型模式-构建者模式 Builder 1.简介 构建负载对象,在new 的时候或者每个属性set 会比较多;客户端代码会变得很复杂; 当需要实例化一个复杂的类,用来的到不同对象时,我们可以使用不同的类对他们的实例化操作逻辑进行封装,这个类就被称为建造者 2.角色 Director:指导如何构建对象,这个在有的变体模式中可以省略掉,代码可以合并到客户端中; Product:产品类,复杂对象,建造者创建的对象 Builder:抽象建造者类;用于声明构建产品类的组成部分的抽象类或者接口,他的作用是

weixin_44244088的博客 256

ldpc编解码器设计与仿真

计算校验节点到变量节点的消息 m_{c \to v}=2 \cdot atanh(\prod_{v’ \in N©\setminus v}tanh(\frac{m_{v’ \to c}}{2}))。计算变量节点到校验节点的消息 m_{v \to c}=L_{v,0}+\sum_{c’ \in M(v)\setminus c}m_{c’ \to v}。◦ 对于每个变量节点 v,计算最终 LLR 值 L_{v,f}=L_{v,0}+\sum_{c \in M(v)}m_{c \to v}。

youngerwang的博客 809

结合 Conda 手动安装 RepeatMasker

RepeatMasker 是一个广泛使用的生物信息学工具,用于识别和屏蔽(mask)基因组序列中的 重复序列(repeats) 。在使用过程中需要调用重复序列数据库(Repbase 和 Dfam),如果使用Conda安装的话会出现许多问题,因此推荐手动安装。在此记录我手动安装RepeatMasker的流程,希望对各位同学有所帮助。

m0_65437087的博客 2536

设计模式—创建型—构建者模式

理解 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 比如装电脑,我们只需要提供各个部件(cpu,主板,显卡)的配置。其他事我们不用管,交给电脑商家。 术语 Director: 指挥者类,用于统一组装流程,对外暴露一个方法让客户传递电脑的型号参数即可,构造者模式隐藏构造流程细节的体现。 Builder:抽象Builder类,规范产品的组建,注意这里的组建...

点滴积累 244

南京邮电大学电工电子基础B实验六(组合逻辑电路)

南京邮电大学电工电子基础B实验五(组合逻辑电路);电工电子;南京邮电大学;计算机学院;实验报告;电路图;

亦是远方的小地方 1万+

设计模式01_设计模式概述、创建型模式概述、单例模式、工厂模式、构建者模式

设计模式01_设计模式概述、创建型模式概述、单例模式、工厂模式、构建者模式

所得皆惊喜 1290

Polyworks宏脚本开发入门:5分钟搞定环境搭建与基础命令录制

本文详细介绍了Polyworks宏脚本开发的入门指南,包括环境搭建、基础命令录制和核心对象操作。通过5分钟快速启动开发模式,掌握自动化操作流程和脚本调试技巧,帮助工程师高效完成工业测量与三维检测任务。

weixin_29306875的博客 539

nRF开发环境搭建全攻略:VS Code + nRF Connect SDK + Zephyr实战

嵌入式开发中,环境配置往往是新手入门的第一道障碍,尤其面对基于Zephyr RTOS的Nordic nRF平台时,工具链的复杂度常让人望而却步。理解构建系统、SDK版本管理和调试工具之间的协作关系,是高效开发的前提。Zephyr作为开源实时操作系统,通过设备树和Kconfig实现硬件描述与功能配置,而nRF Connect SDK(NCS)则是Nordic基于Zephyr的增强发行版,两者结合为物联网开发提供了强大支持。基于VS Code搭建开发环境,配合west工具管理多仓库、CMake/Ninja执行构

weixin_29188997的博客 227

设计模式----创建型设计模式(单例模式、工厂方法模式、构建者模式)

@TOC 关注的问题:创建对象,将对象的创建和使用分离,这样的目的可以降低代码的耦合度的问题。 单例模式、工厂模式、抽象工厂模式、建造者模式、原型模型 单例模式(Singleton Pattern) 单例介绍 定义: 单例模式(Singleton Pattern):保证一个类只有一个实例,并提供一个访问他的全局访问点。 单例类图: 单例中包含的角色: 单例类:包含一个实例且能自行创建这个实例类 单例模式特点: 1、单例类只有一个实例对象 2、单例对象必须由单例类自行创建 3、单例类堆外提供一个可访问该

m0_46853673的博客 472

10万+字超硬核 机器学习 笔记(面试八股)

10w字总结面试中可能用到的机器学习八股和常用算法,包括感知机(Perceptron)、多层感知机(MLP, Multi-Layer Perceptron)、支持向量机(SVM, Support Vector Machine)、K 最近邻(KNN, K-Nearest Neighbors)、朴素贝叶斯(Naive Bayes)、决策树(Decision Tree)、随机森林(Random Forest)、Bagging、Boosting、GBDT、XGBoos、LightGBM等。

haopinglianlian的博客 4661

设计模式之构建者模式

构建者模式(Builder Pattern)是一种创建型设计模式,它通过将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。该模式特别适用于需要生成的对象具有复杂的内部结构或需要多个步骤进行配置的场景。

Java领域优秀创作者 2283

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C++设计模式-创建型设计模式:构建者(Builder)

C++设计模式:构建者模式

最不正经的计算机专业学生 645

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

设计模式学习之构建者模式

构建者(builder)模式,也属于创建型设计模式。将复杂对象的构建算法与表示分离,使得同样的构建过程可以创建不同的表示,是抽象工厂模式与模板模式的结合。我们还以汽车为例,设想一下这样的场景,老板要根据很多不同的产品族(车轮、方向盘、空调等部件)组装成各种不同类型的汽车。我们将所有的部件都分别抽象一个接口,如果使用抽象工厂模式,排列组合,将会是一个浩大的工程。构建者模式将架构与表示分离,将非常适合

自有贵人相助 806

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Builder建造者/构建者模式-设计模式-创建型

构建者模式builder

phs999的博客 267

【设计模式】构建者模式

构建者模式

m0_46298655的博客 73

1原型模式,构建者模式

文章目录1 创建型:1.1 简单工厂,工厂方法,抽象工厂1.4原型模式(copy)1.5构建者模式 1 创建型: 为什么会使用创建型设计模式那? 1 因为我们只是想使用对象,不是为了去创建对象 2 创建对象的细节有时候复杂或者是隐蔽的,对于使用者来说,要了解对象的创建细节是比较痛苦且没有必要的 1.1 简单工厂,工厂方法,抽象工厂 1.4原型模式(copy) 作用: 就是给我一个原型,我给你一个...

Insist___的博客 263

构建者模式:优雅构建复杂对象的艺术(创建型)

优势说明封装性好​隐藏产品的内部结构和构建过程扩展性强​增加新的具体构建者很容易,符合开闭原则精细控制​可以精细控制构建过程,逐步构建复杂对象代码可读性​链式调用让代码更加清晰易懂参数校验​可以在 build() 方法中进行集中参数校验构建者模式通过分步构建和链式调用,完美解决了复杂对象的创建问题。它让代码更加:✅可读:清晰的构建步骤✅灵活:支持多种配置组合✅安全:参数校验和不可变对象✅可维护:构建逻辑集中管理。

滴水穿石,不断积累! 329

Java 设计模式—构建者模式简单使用

构建者模式中,用一个构建者类负责定义用于构建复杂对象的方法。这些方法通常是添加复杂对象的各个部分的方法。然后,有一个指挥者类负责调用构建者类的方法来构建复杂对象。

龚小帅的博客 583

c#设计模式3——创建型模式_构建者(创建者)模式

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _1.创建者模式_建造者模式 { //将一个对象的构建与表示分离,使同样的构建过程可以创建不同的表示。//分离部件的构造(Builder负责)与装配(Director) //优点: //1、易于解耦,将产品本身与产品创建过程进行解耦,可以使用相同的创

mlxg99999的博客 276

设计模式之构建者模式(Builder Pattern)

构建者模式(Builder Pattern)是一种创建型设计模式,旨在将复杂对象的构建过程与其表示分离。通过这种模式,客户端无需知道对象构建的具体细节或顺序,可以通过使用构建者逐步创建对象。

博客 324

设计模式——创建型模式

创建型模式抽象了实例化过程,他们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,一个对象创建模式将实例化委托给另一个对象。 1. Factory Method作用:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到子类。UML结构图: 抽象基类:1)Pro...

weixin_30924239的博客 92

mybatis中的生成器(构建者模式)

https://www.yuque.com/docs/share/d92576d9-04e4-44dc-8891-547578922773?# 《生成器模式(构建者模式)》

h3110n3w0r1d 597
上一篇: 设计模式-创建性-单例模式
下一篇: C/C++语言基础
jhonjson
博客等级 码龄11年 220粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值