Java静态类 Builder(建造者)模式
在Java世界里,经常被提到静态这个概念,static作为静态成员变量和成员函数的修饰符,意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见。最近一个项目里频繁用到static修饰的内部类,再读了一下《Effective Java》才明白为什么会用static来修饰一个内部类也就是本文的中心——静态类。
如果一个类要被声明为static的,只有一种情况,就是静态内部类。如果在外部类声明为static,程序会编译都不会过。在一番调查后个人总结出了3点关于内部类和静态内部类(俗称:内嵌类)
1.静态内部类跟静态方法一样,只能访问静态的成员变量和方法,不能访问非静态的方法和属性,但是普通内部类可以访问任意外部类的成员变量和方法
2.静态内部类可以声明普通成员变量和方法,而普通内部类不能声明static成员变量和方法。
3.静态内部类可以单独初始化:
Inner i = new Outer.Inner();
普通内部类初始化: (既然定义为内部类,就是不想外部访问,所以在外部初始化才这么特殊)
Outer o = new Outer();
Inner i = o.new Inner();
静态内部类使用场景一般是当外部类需要使用内部类,而内部类无需外部类资源,并且内部类可以单独创建的时候会考虑采用静态内部类的设计,在知道如何初始化静态内部类,在《Effective Java》第二章所描述的静态内部类builder阐述了如何使用静态内部类:
public class Outer {private String name;private int age;public static class Builder {private String name;private int age;public Builder(int age) {this.age = age;}public Builder withName(String name) {this.name = name;return this;}public Builder withAge(int age) {this.age = age;return this;}public Outer build() {return new Outer(this);}}private Outer(Builder b) {this.age = b.age;this.name = b.name;}
}
静态内部类调用外部类的构造函数,来构造外部类,由于静态内部类可以被单独初始化说有在外部就有以下实现:
public Outer getOuter()
{Outer outer = new Outer.Builder(2).withName("Yang Liu").build();return outer;
}
对于静态类总结是:
1.如果类的构造器或静态工厂中有多个参数,设计这样类时,最好使用Builder模式,特别是当大多数参数都是可选的时候。
2.如果现在不能确定参数的个数,最好一开始就使用构建器即Builder模式。
希望有所收获。
原文:https://www.cnblogs.com/Alex--Yang/p/3386863.html
Java静态类 Builder(建造者)模式相关推荐
- Java设计模式(建造者模式-适配器模式-桥接模式)
Java设计模式Ⅲ 1.建造者模式 1.1 建造者模式概述 1.2 建造者模式的注意事项和细节 1.3 代码理解 2.适配器模式 2.1 类适配器模式 2.1.1 代码理解 2.2 对象适配器模式 2 ...
- 折腾Java设计模式之建造者模式
博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...
- java设计模式 建造模式_理解java设计模式之建造者模式
理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...
- Java设计模式之建造者模式(精髓版)
目录 1.建造者模式阐述 2.使用Java代码实现建造者模式 3.为什么需要使用建造者模式? 4.建造者模式与工厂方法模式有什么区别? 1.建造者模式阐述 Java 建造者模式是一种创建型设计模式,其 ...
- java设计模式之建造者模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- JAVA设计模式之建造者模式
转自 JAVA设计模式之建造者模式 建造者模式(Builder)的定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂对象的创建型 ...
- 一文弄懂Java设计模式之建造者模式:图解+游戏角色生成实例
文章目录 详解Java设计模式之建造者模式 案例引入建造者模式 建造者模式 定义 UML类图表示 模式结构 案例分析与代码实现 案例类图实现 代码结构 代码实现 结果分析 指挥者类的深入讨论 钩子方法 ...
- 【Java设计模式】建造者模式、原型模式
建造者模式 (1)需要建造很多零件 (2)需要装配起来 通常用于构建一些复杂的对象.可能需要和工厂模式互相搭配. • 场景: – 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品 ...
- (设计模式四)java设计模式之建造者模式
建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 1.解决的问题 平常一般创建对象,需要new,然后通过set方法给每个属性设置,当创建多个对象的时候,代码重复性 ...
- 【Java设计模式】建造者模式(案例详解)
[辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...
最新文章
- Vbox共享文件夹不显示了
- (五)我的JavaScript系列:JavaScript的糟粕
- 项目经理常扮演的角色
- MANIFEST.MF文件全面解析
- IIS7中WCF配置问题集合
- solaris 10安装Oracle10.2g
- 蓝桥杯大赛 青少年创意编程 第十一届 C++组
- Pycharm 入门问题
- Linux云自动化运维第三课
- 和菜鸟一起学android4.0.3源码之lcd屏幕背光调节
- 国内pip源提示“not a trusted or secure host”解决方案
- 要开始算法了 什么顺序呢?
- 计算机网络分层协议及各层功能
- PDF转成图片后不清晰怎么办呢?
- UI设计到底是什么:什么叫ui设计?
- Android息屏状态下启动App
- 模糊综合评判法实现学生互评
- 学渣小论文投稿期刊记录总结
- 对抗噪音,一键清晰,HMS Core音频编辑服务给你“录音棚”般的体验
- 数据结构 时间复杂度 空间复杂度 一看就懂版本
热门文章
- 广东的 44场“新型招聘会”帮助大学生就业
- Day43-Java面试系列(七)- Redis面试专题
- licheepi nano BS8112A触摸按键之长按短按
- Linux服务器遇到攻击封禁IP、解封IP
- AD显示“Net has no driving source”的解决办法
- 机器学习基础:ROC曲线与AUC计算详解
- 二维码生成及识别接口
- 通信行业如何进行数字化转型?
- 2020最新互联网数据调查显示,Kotlin-势必取代-Java?,java从入门到精通下载
- 关于vRA 6.2.1(vCAC)公网端口映射