DesignPattern-Builder

【设计模式】Builder设计模式详解 Builder模式是一种创建型设计模式,用于将一个复杂对象的构建过程与它的表示分离。通过Builder模式,客户端可以一步一步地创建对象,且无需关心内部的创建细节。这种模式特别适用于创建需要很多步骤或者多个构造函数参数的对象。Builder模式的核心思想是将构建复杂对象的过程封装到一个对象中,而不是将这些逻辑暴露给客户端。通过使用Builder模式,客户端可以逐步构建对象,并且在不影响构建过程的情况下,改变对象的内部表示。 阅读详情

在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

Builder 模式主要用于“分步骤构建一个复杂的对 象”。在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。
变化点在哪里,封装哪里——Builder模式主要在 于应对“复杂对象各个部分”的频繁需求变动。其 缺点在于难以应对“分步骤构建算法”的需求变动。

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Design_Patterns
{
    //对象 剧烈变化 算法不变
    /// <summary>
    /// 创建者模式
    /// </summary>
    class Director//指导者
    {
        public void Construct(Builder builder)
        {
            builder.BuildPartA();
            builder.BuildPartB();
        }
    }

    abstract class Builder//创建者
    {
        public abstract void BuildPartA();
        public abstract void BuildPartB();
        public abstract Product GetResult();
    }

    class ConcreateBuild1 :Builder
    {
        Product product = new Product();

        public override void BuildPartA()
        {
            product.Add("PartA");
        }

        public override void BuildPartB()
        {
            product.Add("PartB");
        }

        public override Product GetResult()
        {
            return product;
        }
    }

    class ConcreateBuild2 : Builder
    {
        Product product = new Product();

        public override void BuildPartA()
        {
            product.Add("PartX");
        }

        public override void BuildPartB()
        {
            product.Add("PartY");
        }

        public override Product GetResult()
        {
            return product;
        }
    }

    public class Product//产品
    {
        ArrayList parts = new ArrayList();

        public void Add(string part)
        {
            parts.Add(part);
        }

        public void Show()
        {
            Console.WriteLine("\nProduct parts -----------");
            foreach (string item in parts)
            {
                Console.WriteLine(item);
            }
        }
    }

    // 指导者 Director 服务员
    public class Waiter
    {
        public void MakeDinner(Kitchener kit)
        {
            kit.MakeDishes();
            kit.MakeSoup();
            kit.MakeRice();
            kit.Drink();
        }
    }
    // 创建者 Builder 厨师
    public abstract class Kitchener
    {
        public abstract void MakeDishes();//做菜
        public abstract void MakeSoup();//做汤
        public abstract void MakeRice();//做饭
        public abstract void Drink();//饮料

        public abstract Food GetFood();
    }
    // 中国厨师
    public class ChinaKitchener : Kitchener
    {
        Food f = new Food();
        string strtemp = string.Empty;
        public override void MakeDishes()
        {
            strtemp = f.AddKinds(" China Dishes ");
        }

        public override void MakeSoup()
        {
            strtemp = f.AddKinds(" China Soup ");
        }

        public override void MakeRice()
        {
            strtemp = f.AddKinds(" China Rice ");
        }

        public override void Drink()
        {
            strtemp = f.AddKinds(" China Drink ");
        }

        public override Food GetFood()
        {
            f.FoodName = " China Food ";
            return f;
        }
    }
    // 法国厨师
    public class FranceKitchener : Kitchener
    {
        Food f = new Food();
        string strtemp = string.Empty;
        public override void MakeDishes()
        {
            strtemp = f.AddKinds(" France Dishes ");
        }

        public override void MakeSoup()
        {
            strtemp = f.AddKinds(" France Soup ");
        }

        public override void MakeRice()
        {
            strtemp = f.AddKinds(" France Rice ");
        }

        public override void Drink()
        {
            strtemp = f.AddKinds(" France Drink ");
        }

        public override Food GetFood()
        {
            f.FoodName = " France Food ";
            return f;
        }
    }
    // 美国厨师
    public class USAKitchener : Kitchener
    {
        Food f = new Food();
        string strtemp = string.Empty;
        public override void MakeDishes()
        {
            strtemp = f.AddKinds(" USA Dishes ");
        }

        public override void MakeSoup()
        {
            strtemp = f.AddKinds(" USA Soup ");
        }

        public override void MakeRice()
        {
            strtemp = f.AddKinds(" USA Rice ");
        }

        public override void Drink()
        {
            strtemp = f.AddKinds(" USA Drink ");
        }

        public override Food GetFood()
        {
            f.FoodName = " USA Food ";
            return f;
        }
    }

    // 食物
    public class Food
    {
        private string foodName = string.Empty;

        public string FoodName
        {
            get { return foodName; }
            set { foodName = value; }
        }

        public string AddKinds(string kindStr)
        {
            // 加工
            return kindStr;
        }
    }
}


HyperLedger Fabric实战(一):基础环境构建 简介 本文将介绍从一台裸机上面如何构建出一个可用的Fabric网络(单机版,非测试网络)。 基础环境构建 Fabric组件安装 阅读详情

相关推荐

Arduino MLX90393磁力计驱动库:高精度三轴霍尔传感器开发指南

三轴霍尔效应磁力计是嵌入式系统中实现无接触角度检测、电子罗盘与电流传感的核心器件。其工作原理基于霍尔电压随外磁场矢量变化的物理特性,通过I²C接口输出高分辨率(16/20-bit)XYZ轴原始数据,并集成温度补偿与数字滤波功能。技术价值体现在确定性响应、低功耗(典型0.5 μA待机)及强抗干扰能力,适用于电池供电设备与实时操作系统环境。典型应用场景包括电机位置反馈、永磁体旋转角度解算、工业编码器和地磁导航。本库专为Arduino生态优化,深度封装MLX90393寄存器协议与自校准流程,同时兼容STM32、E

weixin_29363791的博客 642

设计模式之Builder模式

将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示原谅我这个定义读了好几遍也没有完全读明白什么意思。

Cinderella_wlw的博客 431

AXI backpressure反压机制代码

本文将xilinx的axi读写代码进行修改,实现吞吐量达到50%

m0_64636251的博客 1765

Java 设计模式 --- Builder模式 Java Builder 模式

Java 设计模式 --- Builder模式 Java Builder 模式 一、Builder模式 1、builder模式也叫建造者模式,builder模式的作用将一个复杂对象的构建与他的表示分离,使用者可以一步一步的构建一个比较复杂的对象。 2、有一个User类如下: public class User { private String id ; private String name ; private Integer age ; // ig...

HaHa_Sir的博客 2万+

[V-10]ARMv8/v9-CPU Virtualization-CPU虚拟化架构简介(vCPU/vPE)

本文简要介绍了CPU虚拟化架构的基础知识。

基层架构师的分享 1267

【STABLE_BASELINE3】强化学习算法实战:模型的保存,读取,再训练

STABLE-BASELINE3,模型读取,再训练:有时候需要在已经训练好的模型基础上进行再次训练。

Kiek17的博客 4868

Builder设计模式

     在日常的开发过程中,builder设计模式我们会经常见到,同时它也是设计模式比较重要的设计模式之一,那么今天我们就一起来看看,体会一下builder的设计模式的魅力吧   定义: 将一个复杂对象的构建与它的表示进行分离,使得同样的构建过程可以创建不同的表示   场景: (1)相同的方法,不同的执行顺序,产生不同的事件结果 (2)多个部件或零件,都可以装配到一个对象中,但是产...

qq_27970997的博客 379

BrainVision Recorder 和 BrainVision Analyzer 2.2 安装

本篇为《EEG处理》系列博客的第二篇,该系列博客主要记录EEG信号处理的学习过程中的软件安装和学习过程,方便以后查阅。本篇为BrainVision Recorder 和 BrainVision Analyzer 2.2 的安装过程。 BrainVision Recorder 和 BrainVision Analyzer 2.2 安装安装前奏Brain Vision Analyzer分析软件 安装Brain Vision Recorder记录软件 安装推荐几款个人使用的科研软件 安装前奏 Brain V

梁小憨憨的博客 5064

Java 设计模式 - Builder

Java Design Partterns - Builder

qq_37813031的博客 787

SAP CDS View 教程里的标准视图:SEPM_I_SalesOrderItem_E 当成一张表来用之前,你需要先弄清它到底是什么

摘要:SEPM_I_SalesOrderItem_E 是 SAP EPM demo 中的预交付 CDS 视图,用于表示销售订单行项目数据。它采用 VDM 命名规范,_E 后缀表示对外隐藏内部 UUID 键,提供业务友好的外部 ID 接口。该视图常见于 ABAP Platform 7.50+、开发版系统及 Gateway 教程中,可像表一样通过 Open SQL 查询。实际项目中,这类视图能有效解决内外系统键值映射问题,示例代码展示了如何查询其数据。使用时需注意系统是否安装了 EPM demo 内容。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 552

S7-1500——(一)西门子PLC编程从入门到精通4、SCL间接寻址

学习目标是在掌握博途平台SCL编程语言的基本使用基础之上,进一步了解SCL语言环境下的间接寻址过程,初步具备编写复杂控制程序的能力;在编写plc程序过程中, 需要对plc中的数据进行访问,这就是寻址;直接寻址间接寻址;直接寻址直接寻址就是直接对数据的存储单元进行访问;根据表达方式的不同,可分为绝对寻址和符号寻址;对于plc中的标准数据存储区包括IQMTCL以及标准数据块,既可以使用绝对寻址,也可以使用符号寻址;绝对寻址在使用绝对寻址时,可以寻址的宽度包括位,字,节字,双字;

大小曲奇的博客 2121

设计模式之Builder

Builder设计模式解决了传统构造方法在创建复杂对象时的三大痛点:1)避免构造器重载臃肿问题,通过链式调用按需设置属性;2)消除参数顺序记忆负担,每个属性通过独立方法设置;3)内置参数校验机制,确保对象创建时就符合业务规则。该模式将对象构建过程与表示分离,通过Builder类逐步构建,最终调用build()方法生成不可变对象。相比@Builder注解,手动实现Builder可以集成业务校验逻辑(如邮箱格式、手机号验证等),既保证了代码简洁性,又确保了对象创建时的安全性,特别适用于包含大量可选参数的复杂对象

2403_88816570的博客 1025

【OS】AUTOSAR OS系统调用产生Trap的过程详解

AUTOSAR OS系统调用产生Trap的过程详解

qq_36056498的博客 2438

Builder 设计模式

Builder 模式通过将对象的创建过程步骤化,解决了创建复杂对象时的各种问题,提高了代码的可读性和可维护性。在实际开发中,当遇到对象创建过程复杂或者需要多种表示方式的情况时,使用 Builder 模式是一个不错的选择。

weixin_51429644的博客 943

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

23种设计模式之Builder设计模式

23种设计模式之Builder设计模式 概述 建造者模式(Builder Pattern),是创造性模式之一,Builder 模式的目的则是为了将对象的构建与展示分离。Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。 本质 分离了对象子组件的单独构造(由Builder来单独负责)和装配(由Director来负责)...

Startapi的博客 277

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

builder设计模式

Builder(建造者)设计模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示相分离,使得同样的构建过程可以创建不同的表示。这种模式通常用于创建一些复杂的对象,这些对象的构建步骤相对稳定,但具体的表示可能有所不同。

Zhou000401的博客 501

计算机控制技术及应用

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

java builder设计模式_java的设计模式 - Builder模式

Builder 模式的目的?构造对象的方式过于复杂,不如将之抽离出来。比如,构造器参数过多这样说也有点抽象,举个例子吧。举个例子因为它的属性比较多,所以构造函数也是挺吓人的。我看到也不太想调用。如果现在要构造一条消息投递模式(delivery mode)为 2优先级(priority)是 2content-type 为 text/plain在没有 builder 模式之前,是这样构造的new AM...

weixin_39696197的博客 206

Java Builder模式(设计模式之Builder模式)

1.设计模式之终极结合 昨天项目上线(今年是没有新需求了,那提前祝大家新年快乐),上班继续最近几期博客的编写。承接上一篇博客观察者模式,这一期我们一起来了解一下Builder模式。我们最近几期博客打算主要讲一下单例模式、观察者模式、Build模式,目的是为了方便后期为大家带来RXJava+Retrofit2.0+Okhttp3结合使用的网络请求框架。 思考了一上午,我该怎么写出Builder模...

IBM_Forever 4万+

Java设计模式之builder模式

Java设计模式之builder模式 今天学mybatis的时候,知道了SQLSessionFactory使用的是builder模式来生成的。再次整理一下什么是builder模式以及应用场景。 1. builder简介 builder模式也叫建造者模式,builder模式的作用将一个复杂对象的构建与他的表示分离,使用者可以一步一步的构建一个比较复杂的对象。 2. 代码实例 我们通常构造一个有很多参...

WangJun的专栏 208

精讲设计模式-Builder模式

精讲设计模式- Builder模式

咸鱼弟的博客 1298

Builder的设计模式详解

在学习静态内部类的时候时候发现了这种设计模式,网上看了一些资料按照自己的理解写了出来。

weixin_42330641的博客 1363

builder 设计模式

代码: public class Contact { private String name; private String sex; private Integer age; private Contact(Builder builder){ this.name=builder.name; this.sex=builde...

厚积薄发的博客 386

Builder design pattern in java

Builder设计模式总结起来,Builder设计模式主要用来解决如下两类问题:1、多参数对象的构造 2、对象构建和显示分离为了理解“多参数对象的构造”,请看下面代码:public class Person { private final String lastName; private final String firstName; private final String m

biscuit的专栏 739

Android Dialog中的Builder设计模式

1.Builder设计模式的定义 Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们。用户不知道内部的具体构建细节。Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到。 2.使用Builde

carlwang100的专栏 1995
上一篇: DesignPattern-Abstract Factory 修改
下一篇: 浅拷贝 深拷贝
andycode
博客等级 码龄17年 12粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值