effective java 第三版 builder建造者 P12

effecctivejava 第三版中文 立即下载
package Effective02.P12;

import java.util.EnumSet;
import java.util.Objects;
import java.util.Set;

public abstract class Pizza {
    public enum Topping{
        HAM, MUSHROOM, ONION,PEPPER, SAUSAGE
    }
    final Set<Topping> toppings;

    Pizza (Builder<?> builder){
        toppings =builder.toppings.clone();
    }

    abstract static class Builder<T extends Builder<T>>{
        EnumSet<Topping> toppings =EnumSet.noneOf(Topping.class); //用于创建elementType类型的空集
        public T addTopping(Topping topping){
            //Objects.requireNonNull()如果当前对象为空 会抛出一个空指针异常
            //否则就会返回当前对象
            toppings.add(Objects.requireNonNull(topping));
            return self();
        }
        abstract NyPizza build();
        protected abstract T self();
    }

    @Override
    public String toString() {
        return super.toString();
    }
}
package Effective02.P12;

import java.util.Objects;

public class NyPizza extends Pizza{
    public enum Size {SMALL, MEDIUM, LARGE }
    private final Size size;

    private NyPizza (Builder builder){
        super(builder);
        size =builder.size;
    }

    public static class Builder extends Pizza.Builder<Builder>{
        private final Size size;
        public Builder(Size size){
            this.size = Objects.requireNonNull(size);
        }
        public NyPizza build(){
            return new NyPizza(this);
        }
        protected Builder self(){
            return this;
        }
    }

    @Override
    public String toString() {
        System.out.println("size: "+ size);
        return super.toString();
    }
}
package Effective02.P12;

public class MainClass {
    public static void main(String[] args) {
        NyPizza pizza = new NyPizza.Builder( NyPizza.Size.SMALL )
                .addTopping( Pizza.Topping.SAUSAGE ).addTopping( Pizza.Topping.ONION ).build();

        System.out.println(pizza.toString());
    }
}

 

Effective-Java读书笔记 Effective-Java读书笔记,别人分享的 立即下载

相关推荐

VC Spyglass CDC实战:从TCL脚本到SDC约束的完整避坑指南

本文是一份针对数字IC验证工程师的VC Spyglass CDC实战指南。文章详细阐述了从TCL脚本环境搭建、SDC约束编写到典型CDC违规(如SETUP_PORT_UNCONSTRAINED)诊断与修复的完整流程,旨在帮助读者高效避坑,深入理解工具逻辑,从而完成可靠的时钟域交叉验证。

go5gopher的博客 382

当构造方法参数过多时使用builder模式

静态工厂和构造方法都有一个限制:它们不能很好地扩展到很多可选参数的情景。请考虑一个代表包装食品上的营养成分标签的例子。这些标签有几个必需的属性——每次建议的摄入量,每罐的份量和每份卡路里 ,以及超过 20 个可选的属性——总脂肪、饱和脂肪、反式脂肪、胆固醇、钠等等。大多数产品都有非零值,只有少数几个可选属性。   应该为这样的类编写什么样的构造方法或静态工厂?传统上,程序员使用了可伸缩(tele...

不一样的花朵的博客 936

MAX31855电路和程序,实现SPI和软件模拟时序两种方式读取数据

1. 概述 MAX31855为热电偶至数字输出转换器,内置14位模/数转换器(ADC)。器件带有冷端补偿检测和修正、数字控制器、SPI兼容接口,以及相关的控制逻辑,在温度控制器、过程控制或监测系统中设计用于配合外部微控制器(μC)工作。提供多个版本的器件,每个版本针对特定的热电偶类型(K、J、N、T或E型)进行优化和调整。热电偶类型以器件型号后缀表示(例如MAX31855K)。 器件输出14位...

睿思派克 1万+

阿里内部学习指南《Effective Java中文 第3版》程序员进阶必备

Java从1997年诞生到日趋完善,经过了20多年不断的发展壮大,已经拥有了近千万开发人员。如何编写出更清晰、更正确、更健壮且更易于重用的代码,是大家所追求的目标。 经典Jolt获奖作品《Effective Java》的第3版这本书,对上一版内容进行了彻底的更新,介绍了如何充分利用从泛型到枚举、从注解到自动装箱的各种特性,帮助读者更加有效地使用Java编程语言及其基本类库:java.lang. java.util和java.io,以及子包,如java.util. concurrent和java.util.

文章中资料均可获取,有需要请添加yunduoa2019即可 947

TX 的 LOL(Local Oscillator Leakage,本振泄露)

项目内容LOL 是什么本振残留在 TX 输出中心频率上的杂散主要原因IQ 失衡、硬件不完美、零中频架构影响杂散、干扰、性能劣化、安全问题解决方法初始化校准 + 跟踪校准(AD9371 支持)检测手段频谱仪、回环检测、ADC ILA 抓取。

weixin_41230430的博客 2044

VirtualBox 7.0.8 + Android-x86 9.0 保姆级安装教程(附图形界面卡顿解决方案)

本文提供VirtualBox 7.0.8与Android-x86 9.0的详细安装教程及性能优化方案,帮助开发者解决图形界面卡顿问题。从环境准备到高级配置,涵盖硬件要求、安装步骤、显存优化及ADB调试等实用技巧,显著提升虚拟机流畅度,适用于应用测试和开发调试。

weixin_29224309的博客 523

Effective-Java-Chapter3

传递性:对于任何非空的引用值 x, y, z,如果 x.equals(y) 返回 true,y.equals(z) 返回 true,那么 x.equals(z) 必须返回 true。一致性:对于任何非空的引用值 x 和 y, x.equals(y) 的多次调用必须一致地返回 true 或一致地返回 false,前提是不修改 equals 中使用的信息。对称性:对于任何非空参考值 x 和 y,x.equals(y) 必须在且仅当 y.equals(x) 返回 true 时返回 true。

qq_43259860的博客 974

本地AI助手部署指南:DeepSeek Harness与Ollama集成实践

AI Agent作为当前人工智能领域的热门技术,通过模拟人类决策过程,能够自主规划、调用工具并执行复杂任务。其核心原理在于将大语言模型的推理能力与外部工具API相结合,形成可闭环的工作流。这种技术架构的价值在于显著提升了AI系统的实用性和自动化水平,使其从单纯的对话工具转变为能够解决实际问题的智能助手。在应用场景上,AI Agent广泛应用于代码生成、数据分析、自动化办公等领域。本文聚焦于如何通过DeepSeek Harness平台与Ollama本地模型的集成,实现隐私安全、离线可用的AI助手部署方案,特别

dengjuanshou7445的博客 474

【Java笔记(49)】EffectiveJava第二条之建造者模式(建造者模式)

静态工厂方法代替构造器一、大白话二、三种模式的优缺点1、重叠构造器模式① 优点② 缺点2、JavaBeans模式① 优点② 缺点3、建造者模式① 优点② 缺点三、总结 一、大白话 静态工厂和构造有个共同的局限性:不能很好的拓展到大量的可选参数中。 一般采用 重叠构造器模式 和JavaBeans模式,但这两种模式都各有缺陷。 而建造者模式既能保证重叠构造器模式那样的安全性,也能拥有像JavaBeans模式那样的可读性。 Buidler模式是采用一个静态类Builder,来对属性进行赋值,然后再通过调用bui

weixin_43493559的博客 530

YOLOv10精度上不去?QAT量化感知训练全流程,INT8推理mAP只掉0.8%

普通PTQ量化虽简单,但无法应对YOLOv10的小目标特征和激活分布波动,导致精度暴跌。QAT通过“模拟量化误差+联合优化权重与量化参数”,让INT8模型精度接近FP16,同时速度提升1.8倍,完美适配实时检测场景(如安防监控、自动驾驶)。该流程已在工业级项目中验证,针对YOLOv10的优化策略(敏感层保护、小目标加权、分阶段训练)可直接迁移至其他YOLO系列(v8/v9),量化后精度损失均可控制在1%以内。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 915

C++实现设计ATM机系统

这个示例实现了一个基本的ATM机系统,支持注册、登录、存款、取款、查询余额和保存数据等功能。当然,这只是一个简单的ATM机模拟,实际的ATM机系统需要更复杂的逻辑和更严格的安全措施。C++编写一个简单的ATM机系统,我将提供一个基本的实现示例,但由于ATM机系统的复杂性和安全性要求,这只是一个简单的模拟,不适合在实际环境中使用。试设计一简单模拟ATM机系统,系统以菜单方式工作,采用自定义函数设计各功能模块被主菜单调用,使之能提供以下基本选项。=========欢迎使用ATM=========

走向CTO的路上... 1241

《Effective java》 第三版 核心笔记

什么是接口定义类型?接口的主要目的是定义一个类型。当一个类实现了一个接口,它就是在向使用者声明它属于这个接口定义的类型,并承诺提供该接口所规定的行为(方法)。常量接口违反这个规则。接口就是用来定义规范的,如果声明了常量,那么子类会继承常量,出现污染命名空间等问题。什么是标记接口?标记接口是一种不包含任何方法或常量声明的接口。它的唯一作用是“标记”或指示实现它的类具有某种特定的属性或能力。// Serializable 接口就是一个标记接口// 没有任何方法声明// 实现标记接口的类。

CoFFee________的博客 980

【ComfyUI】Animate 保留原视频背景角色替换视频生成

本文介绍了智能创作与视频生成的工作流设计,强调其作为围绕业务目标、数据流转和模型能力的有机整体。工作流由数据输入、模型处理、结果合成和输出展示构成,通过节点化连接实现高效复用与扩展。文章重点解析了核心模型(如CLIP Vision、WanVideo等)的功能和协作方式,以及各类节点(输入、处理、控制、输出)的作用。最后展示了工作流在视频角色替换、虚拟试衣等场景的应用价值,并提供了相关开发资源链接。该设计通过模块化实现了灵活适配不同业务需求的能力。

Mr数据杨 1860

java builder模式创建对象的使用

转载注明出处https://www.cnblogs.com/rolayblog/p/10552085.html 背景 由.net转战java,发现在C#语法中,我们新建一个对象赋值时经常这样写: 1 Person person=new Person(){ 2 age=1, 3 name="Rolay", 4 .....................

weixin_38169927的博客 400

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

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

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

建造者模式,这个是必要知道的

摘要:建造者模式是解决Java中复杂对象构造问题的优雅方案。当类构造函数参数过多且部分可选时,传统构造方法或Setter模式会导致代码可读性差、线程不安全等问题。建造者模式通过静态内部类Builder实现链式调用,支持必填参数强制校验、可选参数默认值设置,最终构建不可变(final)对象。该模式既保证了代码清晰度,又实现了线程安全,被广泛应用于JDK、Guava等框架中。与工厂模式不同,建造者模式专注于单个复杂对象的分步构建过程。

GQ_666的博客 1072

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

DashBeam 完整指南:免费跨平台点对点文件传输,3 步跑通

想把一个 20 GB 的视频发给朋友,网盘告诉你"文件太大",邮件告诉你"超限",还得先注册个账号?DashBeam 是一款免费开源的跨平台文件传输工具——两台设备直连,数据不经过第三方服务器,不限大小、不用账号、不限速。 ## 一句话定位:设备直连的文件传输,云端靠边站 它是基于点对点(P2P)技术的传输应用,覆盖桌面、Android、CLI 和 Web 四种端: - · P2P 直连 +

gitblog_00985的博客 140

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Effective-Java:使用静态工厂方法或者Builder构建器来代替构造方法

文章有参看其他博主博客: 考虑使用静态工厂方法替代构造方法[https://www.cnblogs.com/chenpi/p/5981084.html] 最近在阅读《Effectivce-java》的时候,里面提到了用静态工厂方法来给类创建对象,替代原有的构造方法。这里是说,并不是要取缔类中原有的构造器,而是说创建对象时不通过构造器,而是通过静态工厂方法来创建。这样做有它的有点,当然也有缺点,下面一起探究一下。 一、概述 ​ 在Java开发过程中,创建对象通常的做法是通过有参或者无参构造器创建对

算云烟 420

【effective java】遇到多个构造器参数时要考虑用构建起

遇到多个构造器参数时要考虑用构建起 最近看《effective java》。看到第二条关于创建实例的一条的一条建议。 书中实例化对象的三种方式 重叠构造器的方式创建对象 java beans模式的模式创建对象 构建器模式(推荐) 重叠构造器模式 我们初学的时候都会选择 重画构造器模式,在这种情况下,第一个构造器是实例化对象必须的参数,第二个会多一个参数,就这样叠加,最后是一个有所有参数的构造器。 java beans模式 这种模式,也是我们常用的一种模式,说白了就是通过setter/getter给属性赋

疯狂的三十哥的博客 232

Builder模式的思考(Effective Java)

《Effective Java》(第2版)中第二条中提到:遇到多个构造器参数时要考虑用构建器。在复习static关键字和内部类时回头看了一下,这才明白了为什么要用静态内部类来做处理,这里记录一下。 先看再看一下《Effective Java》书中的例子,例子中是用一个类表示包装食品外面显示的营养成分标签。这些标签中有几个是必需的:每份的含量、每罐的含量以及每份的卡路里,还有超过20个可选域:总脂...

weixin_30631587的博客 100

《Effective Java》Builder

试想一下,如果现在有这样的一个方法,需要你调用。 FunctionReality fr = Function.getReality(Date time,String place,int age, Personality p,Skill skill ...)如果是在写代码的时候需要调用一个方法超过了5个变量需要进行值得设置。这个时候你可能心情就变得比较复杂了。 我们可以很清楚的看到,这样的传递参数的

huangxiaoming1993的博客 394

Effective Java 3rd 条目2 面临众多构造子参数时考虑builder

静态工厂和构造子都有一个限制:它们不能很好调节大量可选参数。考虑这个情况,一个类表示包装食品上的营养成分标签。这些标签有些是必需的域,食用份量、份数和每份卡路里数;还有二十多个可选域,总脂肪含量、饱和脂肪含量、反脂肪含量、胆固醇含量,钠含量等等。大多数产品中这些可选参数只有很少的非零值。对于这样的类,你打算用什么类型的构造子或者静态工厂?习惯上,编程人员用重叠构造子(telescoping cons

tigershin的专栏 628

effective java 第二条

第二条:遇到多个构造器的时候考虑构建器 构造器在遇到多个属性的时候,将采用重叠构造器的模式,会使得客户端代码很难编写,并且非常难以阅读,且容易出错,这是很关键的一点。针对这一点,提出了javabean的模式,通过一个无参构造函数来创建对象,然后通过setter方法来设置每个必要的参数。类似于下面: //整个对象的雏形已经在第一句代码中创建出来了,不是一次性完成的,下面还有多个set per...

mindcarver 347

Effective Java Second Edition --- Builder Pattern

如果类的构造器或者静态工厂中有多个参数,设计这种类时,Builder模式是一种不错的选择,特别是当大多数参数是可选的时候。 与使用传统的重载构造函数模式相比,使用Builder模式的客户端代码更易于阅读和编写,构造器也比javabeens更加安全。 代码如下: 1 /** 2 * Created by zhanga.fnst on 2016/3/14. 3 */...

weixin_30484247的博客 96

Effective Java 总结 (持续更新中)

Effective一 创建和销毁对象1. 考虑用静态工厂方法代替构造器2. 遇到多个构造器参数时考虑用构造器3. 用私有构造器或者枚举类型强化Singleton属性4. 通过私有构造器强化不可实例化的能力5. 避免创建不必要的对象6. 消除过期对象的引用7. 避免使用终结方法 一 创建和销毁对象 1. 考虑用静态工厂方法代替构造器 优势: 它们有名称 不必在每次调用他们的时候都创建一个新对象 它们可以返回原返回类型的任何子类型的对象 interface Service { } interface P

jic的博客 613

Apache Maven Model Builder 深度解析:effective POM 的两阶段构建、继承装配与模型插值

在 Maven 中,一个 `pom.xml` 从磁盘上的原始 XML 变成构建真正使用的“有效模型”(effective model),中间经历了大量处理:profile 激活、parent 链解析、继承合并、`${...}` 插值、依赖管理与插件管理注入等。这一整套流程由 **Maven Model Builder** 完成,其核心组件是 `ModelBuilder` 接口及其默认实现 `Def

gitblog_00613的博客 11
上一篇: 利用适配器,可以利用for-each 语句来遍历Stream
下一篇: 避免使用Finalizer和Cleaner机制-[创建和销毁对象]
absolute_chen
博客等级 码龄9年 40粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值