java23种常用设计模式之建造者模式(Builder)升级版实例

设计模式-建造者模式在Java中使用示例 没有人买车会只买一个轮胎或者方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件的完整汽车。如何将这些部件组装成一辆完整的汽车并返回给用户,这是建造者模式需要解决的问题。建造者模式又称为生成器模式,它是一种较为复杂、使用频率也相对较低的创建型模式。建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品。建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离, 阅读详情

有句俗话叫懒人屎尿多!我也不知道我这是怎么回事,懒得要死,还写这么多,这例子那例子的,挺啰嗦的!

昨天的工厂方法和抽象工厂模式写了N多,今天真不想写,可是总觉得,不写的话我哪有机会吹水,还是写吧!(真是个坏人,不考虑看的人感受,拜托不要总是成全自己恶心别人好不!!!)

说起这个建造者模式,我们还是继续昨天createHuman的故事继续编吧!

昨天说到create了各种人,有白的、黑的,黄的,还有男的、女的,他们都会说会笑。很好,但是有人喜欢先说在笑,有的人喜欢先笑再说,每个人都有自由,想什么顺序就什么顺序,这个可以吧?Of course!

为了人类的自由,我得有鞠躬尽瘁死而后已的决心Code出来才行!

首先,昨天的Human要upgrade一下才行。

package com.freedom.builder2;

import java.util.ArrayList;

public abstract class HumanModel{

	// 存放各个基本方法执行的顺序
	private ArrayList<String> sequence = new ArrayList<String>();

	public abstract void say();

	public abstract void smile();

	final public void <span><span>createHuman</span></span>() {
		//使用数组的遍历,确定那个先执行
		for (int i = 0; i < this.sequence.size(); i++) {
			String actionName = this.sequence.get(i);
			if (actionName.equalsIgnoreCase("say")) {
				this.say();
			} else if (actionName.equalsIgnoreCase("smile")) {
				this.smile();
			}
		}
	}

	// setSequence 方法是允许客户自己设置一个顺序,把传递过来的值传递到类内
	final public void setSequence(ArrayList<String> sequence) {
		this.sequence = sequence;
	}

}
package com.freedom.builder2;

public class WhiteHuman extends HumanModel{
    
    
    @Override
    public void say() {
        System.out.println("white human can say anything!");
        
    }

    @Override
    public void smile() {
        System.out.println("white human can smile!");
        
    }

}
package com.freedom.builder2;

public class BlackHuman extends HumanModel{
    
    
    @Override
    public void say() {
        System.out.println("black human can say anything!");
        
    }

    @Override
    public void smile() {
        System.out.println("black human can smile!");
        
    }

}
package com.freedom.builder2;

import java.util.ArrayList;

import org.junit.Test;

public class TestBuilder {

    @Test
    public void client() {
        /*
        * 客户说我要你给我create一个白人,先笑再说的;还要一个黑人,先说再笑的。
        */
        HumanModel whiteHuman = new WhiteHuman();
        ArrayList<String> sequence = new ArrayList<String>(); //存放run的顺序
        sequence.add("smile"); //客户要求,先笑
        sequence.add("say"); //再说话
        //然后把这个顺序给白人:
        whiteHuman.setSequence(sequence);
        whiteHuman.r<span><span>createHuman</span></span>un();
        HumanModelblackHuman = new BlackHuman();
        ArrayList<String> sequence2 = new ArrayList<String>(); //存放run的顺序
        sequence2.add("say"); //客户要求,先说话
        sequence2.add("smile"); //再微笑
        //然后把这个顺序给黑人:
        blackHuman.setSequence(sequence2);
        blackHuman.<span><span>createHuman</span></span>();
    }
    
}

/*
运行结果:
white human can smile!
white human can say anything!
black human can say anything!
black human can smile!
*/
这还不能实现想怎样就怎样,只能满足一开始生产就订好顺序的,每次都要给人定义顺序,一两个无所谓,N个呢,一会先笑,一会先说,会疯的,下面继续改造,增加一个 HumanBuilder 的抽象类,以及两个实现类,其目的是你要那人先笑就先笑,先说话就先说话。
package com.freedom.builder2;

import java.util.ArrayList;

public abstract class HumanBuilder {

	//建造一个模型,给我一个顺序,我就create这个顺序的人模型
	public abstract void setSequence(ArrayList<String> sequence);
	
	//设置完毕顺序后,直接拿到这个人模型
	public abstract HumanModel getHumanModel();
}

package com.freedom.builder2;

import java.util.ArrayList;

public class WhiteHumanBuilder extends HumanBuilder{
    
    private WhiteHuman whiteHuman = new WhiteHuman();

    @Override
    public void setSequence(ArrayList<String> sequence) {
        this.whiteHuman.setSequence(sequence);
        
    }

    @Override
    public HumanModel getHumanModel() {
        return this.whiteHuman;
    }
    
}
package com.freedom.builder2;

import java.util.ArrayList;

public class BlackHumanBuilder extends HumanBuilder{
    
    private BlackHuman blackHuman = new BlackHuman();

    @Override
    public void setSequence(ArrayList<String> sequence) {
        this.blackHuman.setSequence(sequence);
        
    }

    @Override
    public HumanModel getHumanModel() {
        return this.blackHuman;
    }
    
}

//Test
package com.freedom.builder2;

import java.util.ArrayList;

import org.junit.Test;

public class TestBuilder2 {

    @Test
    public void client() {
        
        //客户说我要你给我先笑再说的
        ArrayList<String> sequence = new ArrayList<String>(); //存放run的顺序
        sequence.add("smile"); //客户要求,先笑
        sequence.add("say"); //再说话
        //要一个白人
        WhiteHumanBuilder whiteHumanBuilder = new WhiteHumanBuilder();
        whiteHumanBuilder.setSequence(sequence);
        WhiteHuman whiteHuman =  (WhiteHuman) whiteHumanBuilder.getHumanModel();
        whiteHuman.createHuman();
        //要一个黑人
        BlackHumanBuilder blackHumanBuilder = new BlackHumanBuilder();
        blackHumanBuilder.setSequence(sequence);
        BlackHuman blackHuman =  (BlackHuman) blackHumanBuilder.getHumanModel();
        blackHuman.createHuman();
    }
    
}
/*
运行结果:
white human can smile!
white human can say anything!
black human can smile!
black human can say anything!
*/

看,是不是比刚开始直接访问产品类(HumanModel)简单了很多吧,那还有个这样的需求,这两个过程(say,smile)结合不同人种按照排列组合有多种,那我们怎么满足这种需求呢?要有个类来安排这几个方法组合,就像导演安排演员一样,那个先出场那个后出场,那个不出场,我们把这个类叫导演类(Director)。
package com.freedom.builder2;

import java.util.ArrayList;

public class Director {

	private ArrayList<String> sequence = new ArrayList();
	private WhiteHumanBuilder whiteHumanBuilder = new WhiteHumanBuilder();
	private BlackHumanBuilder blackHumanBuilder = new BlackHumanBuilder();

	//A型白人
	public WhiteHuman getAHumanModel() {
		// 清理场景,这里一定要注意
		this.sequence.clear();
		// 这只WhiteHuman的执行顺序
		this.sequence.add("say");
		this.sequence.add("simle");
		// 按照顺序返回一个先会说再会笑的白人
		this.whiteHumanBuilder.setSequence(this.sequence);
		return (WhiteHuman) this.whiteHumanBuilder.getHumanModel();
	}

	//B型白人
	public WhiteHuman getBHumanModel() {
		// 清理场景,这里一定要注意
		this.sequence.clear();
		// 这只WhiteHuman的执行顺序
		this.sequence.add("simle");
		this.sequence.add("say");
		// 按照顺序返回一个先会笑再会说的白人
		this.whiteHumanBuilder.setSequence(this.sequence);
		return (WhiteHuman) this.whiteHumanBuilder.getHumanModel();
	}

	//C型黑人
	public BlackHuman getCHumanModel() {
		// 清理场景,这里一定要注意
		this.sequence.clear();
		// 这只WhiteHuman的执行顺序
		this.sequence.add("say");
		this.sequence.add("smile");
		// 按照顺序返回一个先会说再会笑的黑人
		this.blackHumanBuilder.setSequence(this.sequence);
		return (BlackHuman) this.blackHumanBuilder.getHumanModel();
	}

	//D型黑人
	public BlackHuman getDHumanModel() {
		// 清理场景,这里一定要注意
		this.sequence.clear();
		// 这只WhiteHuman的执行顺序
		this.sequence.add("simle");
		this.sequence.add("say");
		// 按照顺序返回一个先会笑再会说的黑人
		this.blackHumanBuilder.setSequence(this.sequence);
		return (BlackHuman) this.blackHumanBuilder.getHumanModel();
	}
}
程序中有很多this 调用,属于个人人习惯,如果你要调用类中的成员变量或方法,在前面加上this 关键字,不加也能正常的跑起来,但是不清晰,加上this 关键字,明确我就是要调用本类中成员变量或方法,而不是本方法的中的一个变量,还有super 方法也是一样,是调用父类的的成员变量或者方法,最好加上这个关键字,不要省略。
上面每个方法都一个this.sequence.clear(),这个估计一看就明白,ArrayList 和HashMap 如果定义成类的成员变量,那在方法中调用一定要做一个clear 的动作,防止数据混乱,这个如果曾经我亲身经历过一次,ArrayList 中出现一个“出乎意料”的数据,花费了几个通宵才解决这个问题,印象够深刻!

然后 Client 程序就只与Director 打交道了,比如我只要要A 型的白人1W 只,B 型的白人100W只,C 型的黑人1000W ,D 型黑人不要:

package com.freedom.builder2;

import org.junit.Test;

public class TestBuilder3 {

	@Test
	public void client() {
		Director director = new Director();
		// 1W只A型的白人
		for (int i = 0; i < 10000; i++) {
			director.getAHumanModel().run();
		}
		// 100WB型的白人
		for (int i = 0; i < 1000000; i++) {
			director.getBHumanModel().run();
		}
		// 1000WC型的黑人
		for (int i = 0; i < 10000000; i++) {
			director.getCHumanModel().run();
		}

	}

}
/*
结果可想而知,不贴了!
*/ 
清晰简单吧?!写程序重构的最终目的就是简单清晰,让人一目了然,而不是写完就完事了,Java 程序不是像二进制代码、汇编那样,写完基本上就自己能看懂,别人看就跟看天书一样,和蝌蚪文没什么差别,高级语言,要像用中文汉字写小说写故事一样,你写的,别人一眼能看懂。整个程序编写完毕,简洁明了,这就是建造者模式,最后我们来小结一下:
Client() 就是客户,这具体的应用中的需求提供者;

HumanModel 以及两个实现类WhiteHuman和BlackHuman叫做产品类(Product Class),这个产品类实现了模板方法模式,也就是有模板方法和基本方法,这个参考上一节的模板方法模式;

HumanBuilder 以及两个实现类WhiteHumanBuilder 和BlackHumanBuilder 叫做建造者(Builder Class),在上面的例子中就是我建造WhiteHuman和BlackHuman人模,按照指定的顺序;
Director 类叫做导演类(Director Class),负责安排已有模块的顺序,然后告诉Builder 开始建造,客户需要什么人告诉我,我开始拼命的build,于是就没然后了。
看到这里估计就开始犯迷糊了,这个建造者模式和工厂模式有区别吗?有的,虽然有点相似。

记住一点就可以游刃有余的使用了:建造者模式最主要功能是基本方法的调用顺序安排,也就是这些基本方法已经实现了;而工厂方法则重点是创建,你要什么对象我创造一个对象出来,组装顺序则不是他关心的。

建造者模式的使用场景:

一是产品类非常的复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式是非常合适,比如银行交易类项目中,一个产品的定价计算模型有N 多种,每个模型有固定的计算步骤,计算非常复杂,项目中就使用了建造者模式;

二是“ 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到”,这个是我还没有遇到过的,创建过程中不易得到?那为什么在设计阶段不修正这个问题,创建的时候都不易得到耶!要去找产品经理因为设计扯皮还不如乖乖想象代码怎么才具有更强大的拓展性!

Over!

下载源码:http://download.youkuaiyun.com/detail/github_22022001/8294697



建造者模式实例 通过java模拟大众CC的组装实现建造这模式的实例 立即下载

相关推荐

设计模式之建造者模式代码示例

设计模式之建造者模式代码示例,

java设计模式学习笔记——扩展型模式1

在扩展对象行为和功能的时候,常常需要遵循两个原则,LSP替换原则和迪米特法则。LSP的主要思想是一个类的实例应该具有父类的所有功能,迪米特法则要求每个方法只能给有限的对象发消息,包括参数变量、this伪变量,以及this的直接子部分。可以使用设计模式来扩展类或者对象的行为。

Terasa的博客 2523

Java运用设计模式中的建造者模式构建项目的实例解析

主要介绍了Java运用设计模式中的建造者模式构建项目的实例解析,建造者模式对外隐藏创建过程的产品,使用组合的方式,由指挥者来决定建造的流程,需要的朋友可以参考下

Java设计模式(五)创建型- 建造者Builder模式(史上最全建造者模式常规简化链式写法)与使用场景以及优缺点

建造者Builder模式

移动端开发与最新技术 2491

Oracle Linux中/var/log/pcp/pmlogger目录膨胀问题分析与解决

本文详细分析了Oracle Linux系统中/var/log/pcp/pmlogger目录异常膨胀的常见原因与解决方案。当PCP性能监控框架的pmlogger服务日志轮转或清理机制失效时,会导致该目录无限增长,威胁系统稳定。文章提供了从服务状态诊断、配置文件审查到安全清理与预防策略的全流程实战指南,帮助运维人员快速回收磁盘空间并恢复服务正常运行。

weixin_29208327的博客 372

三菱JET伺服限位、原点信号通过PLC刷新设置方法

RWw及RWr软元件的初始设定值,可通过 [Pr. PA01.0 控制模式选择] 及 [Pr. PN22.0 默认映射模式选择] 的值进行切换。JET伺服参数用于CC-Link IE现场网络Basic。循环通信的请求报文与响应报文的收发数据被换读为伺服放大器的对象数据 (RWwn、RWrn)。接下来看映射字2D05具体的内容: 也就是2D05操作字的第九位、第十位、第十一位。响应报文的设定值可进行变更。变更初始设定值时,应变更PDO映射。不同的模式,对应不同的刷新映射内容。GXWORKS3程序。

qq_51166033的博客 8055

java设计模式 建造者模式 示例代码2

ava设计模式 建造者模式 示例代码2

tanwu1的博客 383

一文详细讲解CRM系统(附架构图、流程、功能介绍)

专为中小企业量身打造高性价比的数字化转型路径!企业如何用CRM才能真正做到降本增效?今天,就用一文讲清这些问题!读完本文,你将清楚得了解CRM的概念、框架、流程、功能、企业成功案例,文末还有常见问题解答。

Dabeishandong的博客 9930

Java 设计模式系列(5) —— 建造者模式

讲一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。

smart_an的专栏 1075

Xilinx HydraMini试玩教程

HydraMini是Xilinx推出的基于Pynq-Z2开发板的自动驾驶开发小车,其有着简单易学、高灵活性、高扩展性、高性能等优良特性,是研究人员和学生进入自动驾驶领域的一个平台。本教程会通过最基础的讲解和步骤带领读者熟悉这个平台的基本开发流程。

qq_25762163的博客 1773

8.Python基础语法(五)续【光说不练假把式,上题】

Python基础语法(二) 有关于Python循环语句的几道实操,让大家理解知识点更深更透彻~

孤寒者的博客 2万+

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

意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。何时使用:一些基本部件不会变,而其组合经常变化的时候。如何解决:将变与不变分离开。关键代码:建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。

weixin_42294716的博客 1316

磁环电感参数计算

电感饱和是指当电感中的电流超过一定阈值时,电感中的磁场无法继续增加,而是达到一个饱和状态,导致电感的感应电动势减小或消失。电感通常由线圈组成,当通过线圈的电流不断增加时,线圈内部的磁场也随之增加。然而,当电流达到一定程度时,线圈的铁芯磁化达到饱和,无法进一步增加磁场强度。电感饱和的阈值取决于电感的结构、材料和尺寸等因素。通常情况下,电感的额定电流会标明其饱和电流值。一旦电感中的电流超过了饱和电流,电感将饱和并出现异常行为。当我们谈论电感饱和的时候,实际上是在谈论磁芯饱和——空心的电感永远不会饱和。

小幽余生不加糖 4031

Java 中的 23 种设计模式详解

项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

微笑听雨 7万+

air780e stm32标准库发送英文短信,如何实现?(附相关源码,仅供参考)

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1239

提示工程架构师揭秘:prompt优化中的“隐性成本”如何控制?

当我们谈论Prompt优化时,往往聚焦于“效果提升”——比如让模型生成更准确的回答、更符合要求的格式。优化的本质是“成本-收益”的平衡。那些看不见的“隐性成本”,比如反复调试的时间消耗、复杂Prompt带来的认知负荷、长文本导致的系统资源浪费、后续维护的无穷麻烦,往往会在长期运营中成为压垮效率的“稻草”。本文将从提示工程架构师的视角,揭秘Prompt优化中的“隐性成本”到底是什么、如何量化,以及通过哪些工程化手段将这些“看不见的消耗”转化为“可控制的效率”。

操作系统内核探秘的博客 700

Java设计模式之建造者模式(Builder)详解

建造者模式是一种创建型设计模式,用于分步骤构建复杂对象,特别适合多参数配置或复杂初始化场景。其核心价值在于分离构造与表示,通过链式调用提供流畅API,支持参数灵活组合和构造过程可控。典型应用包括复杂对象创建、多参数配置和不可变对象构建等。模式结构包含指挥者、抽象建造者、具体建造者和产品四个角色,体现了单一职责、开闭等设计原则。代码实现中,产品类封装复杂对象属性,建造者接口定义构建步骤,具体建造者实现细节,指挥者控制流程。该模式优化了对象创建过程,提高了代码可读性和可维护性。

夏日清风 2006

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java 设计模式之Builder建造者模式

创建型模式 1. 手写建造者模式 class User { private String name; private String password; private String nickName; private int age; private User(String name, String password, String nickName, i...

zhaoyang10的专栏 649

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【设计模式——学习笔记】23种设计模式——建造者模式Builder(原理讲解+应用场景介绍+案例介绍+Java代码实现)

讲解建造者模式的思想,介绍其常见的应用场景,举例说明建造者模式的实现方式

我只管埋头前行,剩下的交给时间。 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Java中23种面试常考的设计模式之建造者模式(Builder)---创建型模式】

接下来我们要进行学习的是:【Java中23种面试常考的设计模式之建造者模式(Builder)—创建型模式】。具体建造者ConcreteBuilder:定义我们的实现组件构造者。指挥者Director:定义产品组装接口及组装的实现。抽象建造者Builder:定义我们的组件构造者。产品Product:最终的产品类。1. 使用多个简单的对象一步一步构建成一个复杂的对象。2. 实际开发中,我们所需要的对象构建时非常复杂,且有很多步骤需要处理时,这时建造者模式就很适合。3. 分离了对象子组件的单独构造(由Buil

Coder_ljw的博客 419

java23种常用设计模式之建造者模式(Builder)

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。我们继续简单地看一下代码: 还和前面一样,一个Sender接口,两个实现类MailSender和SmsSender。建造者类如下: package com.freedom.builder;

The code world of freedom 462

23种设计模式之Builder模式

Builder定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 Builder使用场景: 相同的方法,不同的执行顺序,产生不同的事件结果时 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候使用建造者模式非常合适 当初始化一个对象特别复杂,如参数多,且很多参数都具备默认值时 B

论一个程序员的自我修养 1257

【从零入门23种设计模式03】创建型之建造者模式(简易版与导演版)

建造者模式是一种创建型设计模式,将复杂对象的构建过程与表示分离,使同样的构建流程可创建不同实例。它通过静态内部Builder类实现链式调用,解决了臃肿构造函数问题,保证对象状态统一。核心角色包括产品类、抽象建造者、具体建造者和指挥者(可选)。典型实现通过私有化构造方法强制使用Builder创建对象,支持必选参数校验和可选参数默认值设置。该模式适用于多属性对象创建场景(如电脑配置),相比工厂模式更关注构建过程的灵活控制。带Director的完整实现能更好解耦构建流程与细节,而简化版静态内部类写法更常用。

2401_87662859的博客 1120

23种设计模式一建造者模式‌

建造者模式是一种创建型设计模式,它将复杂对象的构建与表示分离,解决传统构造方法在创建多部件对象时的痛点。该模式包含产品、抽象建造者、具体建造者和指挥者四个核心角色,通过分步构建和链式调用实现灵活的对象创建。以电脑组装为例,产品类定义各部件属性,静态Builder类提供链式配置方法,最终通过build()方法生成不可变对象。建造者模式特别适用于构建具有复杂内部结构、属性相互依赖的对象,能有效隔离创建与使用过程,提高代码可读性和可维护性。

J_liaty的博客 1315

JAVA23种设计模式之建造者模式(Builder Pattern)

建造者模式 使用多个简单的对象一步一步构建成一个复杂的对象,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式,一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 介绍 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳

fuu123f的博客 244

Builder构建复杂对象,Java设计模式(GOF23)之建造者模式

一、简述 1.1问题描述 在我们平时阅读源码时,经常会看到Result之类的,尤其是当它写了一串:Result.<List< String>>builder().success().data(stringList).build() 就很蒙。 这类的代码乍一看好像很高大上,其实究其本质就是java设计模式和静态内部类的使用。 1.2疑惑 java设计模式?有用吗?感觉自己写代码写业务的时候没有用到啊?如果说你平时写的代码业务是外功,那么java设计模式就是你要修的内功。对待技术,不能只

eternally_zh128@sina.com的博客 408
上一篇: java23种常用设计模式之建造者模式(Builder)
下一篇: java23种常用设计模式之模板方法模式(Template Method)
freedom1993
博客等级 码龄12年 25粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值