java建造者模式静态内部类,静态内部类的使用方式
静态内部类的两种使用方式
1、什么是静态内部类?
2、静态内部类在生成单例模式中的应用:
为什么要使用静态内部类生成单例对象? 1、在类加载器加载过程中只加载一次,加载的时候生成对象,这利用了天然的类加载器功能,所以生成的对象只有一个,因为只加载一次。 2、这样可以避免并发加同步 double-checked模式锁生成对象,效率更高。
package inner;
public class SingleObject {
private SingleObject(){}
private static class HelpHolder{
private static final SingleObject INSTANCE = new SingleObject();
}
public static SingleObject getInstance(){
return HelpHolder.INSTANCE;
}
public String toString(){
return "this is a singleton object";
}
}
3、静态内部类在builder设计模式中的使用 为什么要在builder设计模式中使用? 1、因为静态内部类的一个主要职责就是专为外部类提供服务,我们在外部类的基础上创建静态内部类BuilderHelper可以专为这个对象使用。 2、builder最重要的是在构造过程中返回this。 3、在java中关于StringBuilder中的append就是对builder模式的很好应用。
上代码:
package inner;
public class Hero {
private String name ;
private String country;
private String weapon;
public String getName() {
return name;
}
public String getCountry() {
return country;
}
public String getWeapon() {
return weapon;
}
public static class HeroBuilder{
private String name ;
private String country;
private String weapon;
public HeroBuilder(String name){
this.name = name;
}
public HeroBuilder setCountry(String country){
this.country = country;
return this;
}
public HeroBuilder setWeapon(String weapon){
this.weapon = weapon;
return this;
}
public Hero build(){
return new Hero(this);
}
}
public Hero(HeroBuilder hb){
this.name = hb.name;
this.country =hb.country;
this.weapon = hb.weapon;
}
public String toString(){
return this.name +"," +this.country +","+this.weapon;
}
}
对以上两个模式进行测试如下:
package inner;
import inner.Hero.HeroBuilder;
public class Visitor {
public static void main(String[] args) {
Hero hh = new HeroBuilder("wqp").setCountry("china").setWeapon("gun").build();
System.out.println(hh.toString());
SingleObject instance = SingleObject.getInstance();
SingleObject instance2 = SingleObject.getInstance();
if(instance == instance2){
System.out.println("they are the same object");
}
System.out.println(instance);
}
}
测试输出结果:
wqp,china,gun
they are the same object
this is a singleton object
java建造者模式静态内部类,静态内部类的使用方式相关推荐
- java建造者模式 ppt_23种设计模式详解及实现方式.ppt
第四讲 建造者模式(Buider) 场景-翻译机 MM最爱听的就是"我爱你"这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有 ...
- activexobject对象不能创建_【设计模式】建造者模式:你创建对象的方式有它丝滑吗?...
目录 什么是建造者模式 为什么要使用建造者模式 构造函数创建对象 set方式构建对象 java实现建造者模式 第一种实现方式 第二种方式 建造者模式与构造函数的对比 建造者模式与工厂模式的对比 总结 ...
- 今儿直白的用盖房子为例,给你讲讲Java建造者模式
本文分享自华为云社区<[Java设计模式]用盖房子案例讲解建造者模式(生成器模式)>,作者: 我是一棵卷心菜 . 现在我们需要建房子,过程为打桩.砌墙.封顶.房子有各种各样的,比如普通房, ...
- 【设计模式】建造者模式:你创建对象的方式有它丝滑吗?
目录 什么是建造者模式 为什么要使用建造者模式 构造函数创建对象 set方式构建对象 java实现建造者模式 第一种实现方式 第二种方式 建造者模式与构造函数的对比 建造者模式与工厂模式的对比 总结 ...
- java - 建造者模式
2019独角兽企业重金招聘Python工程师标准>>> 1,定义: 建造者模式也叫生成器模式,将一个复杂对象的构件与它的标识分离,使得同样的构建过程可以构件不同的标识. 2,通用类图 ...
- Java建造者模式(Builder pattern)
模式简介 建造者模式又称生成器模式,所属创建型设计模式,它提供了一种最佳的创建对象方式,将多个简单的对象一步一步构建成一个复杂的对象.对于用户而言,无需知道创建过程和内部组成细节,只需直接使用创建好的 ...
- Java建造者模式详解
前言 在生活中,有这么一种场景,当需要去4S店买车时,会根据个人的预算,卖家会给你推荐同一个品牌的相应的低配,中配或高配版,在网上购买毕笔记本时也会遇到类似的情况,但不管是汽车也好,还是电脑,它们基本 ...
- JAVA 建造者模式
文章目录 介绍 建造者模式(实现) 介绍 描述 建造者模式设计模式属于创建型模式,通过多个简单的对象去简化一个复杂对象的构建.通过构建和装配的解耦,不同的构建器,也可以做出不同的对象,相同的构建器由于 ...
- java建造者模式--给一个你一看就懂的建造者模式
在开始写这个建造者模式的文章前,我也确实看了挺多次其他介绍这个模式的文章.感觉看了很多次才有一点对建造者模式明白透彻的感觉.细心想来,可能是接口的理解不好,平时工作比较少用到过建造者模式,所以理解的比 ...
- Java建造者模式(生成器模式)
基本介绍: 建造者模式又叫生成器模式,是一种对象构建模式.它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象 建造者模式是一步一步建造一个复杂 ...
最新文章
- Centos 7 让docker飞一会儿
- 鸿海拟将相关物流企业在中国大陆上市
- tensorflow 模型压缩
- 基于OpenCV进行相机标定
- Winform中怎样设置ContextMenuStrip右键菜单的选项ToolStripMenuItem添加照片
- 开源|如何开发一个高性能的redis cluster proxy?
- 机器学习(三十一)——Linear Discriminant Analysis
- python对象三个特性_百度资讯搜索_python对象三个特性
- groovy lambda_Java Lambda流和Groovy Clouse的比较
- string插入字符_String类
- springboot thymeleaf 引入jquery_超详细实战:SpringBoot高级之autoconfigure自动化配置
- postfix所谓的监控功能只是利用sender_bcc而已
- 深度学习——最优化的学习笔记
- 李煜东算法进阶指南打卡题解
- 试试Navicat和Axere RP Pro吧
- CA证书无法与服务器连接,湖北国税常见CA登陆问题的解决办法
- Android 签名板
- 【技术美术图形部分】纹理基础2.0-凹凸映射
- 考研逻辑整理 - 概念和概念的种类
- 青青草php,青青草原博客
热门文章
- kubectl查看node状态_全栈之路:使用pm2自动化部署node项目
- 05 - 微信小程序实例开发 - 综合小娱乐
- cobbler命令_Cobbler部署详细教程基于Centos7.5
- linux系统gpk-update-icon进程占用CPU资源100%
- (补)算法训练Day13 | LeetCode150. 逆波兰表达式求值(栈应用);LeetCode239. 滑动窗口最大值(单调队列);LeetCode347. 前K个高频元素(小顶堆,优先级队列)
- 视频转换为swf格式
- CMAC--基于分组密码的消息认证码的实现及其应用
- 如何用音标来想到单词
- 齐博 src=/do/js.php?id=775,齐博CMS列表页,内容页的边栏,用不同的模板显示的方法...
- 从业务分析到系统建模、研发 基本方法论