静态内部类的两种使用方式

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建造者模式静态内部类,静态内部类的使用方式相关推荐

  1. java建造者模式 ppt_23种设计模式详解及实现方式.ppt

    第四讲 建造者模式(Buider) 场景-翻译机 MM最爱听的就是"我爱你"这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有 ...

  2. activexobject对象不能创建_【设计模式】建造者模式:你创建对象的方式有它丝滑吗?...

    目录 什么是建造者模式 为什么要使用建造者模式 构造函数创建对象 set方式构建对象 java实现建造者模式 第一种实现方式 第二种方式 建造者模式与构造函数的对比 建造者模式与工厂模式的对比 总结 ...

  3. 今儿直白的用盖房子为例,给你讲讲Java建造者模式

    本文分享自华为云社区<[Java设计模式]用盖房子案例讲解建造者模式(生成器模式)>,作者: 我是一棵卷心菜 . 现在我们需要建房子,过程为打桩.砌墙.封顶.房子有各种各样的,比如普通房, ...

  4. 【设计模式】建造者模式:你创建对象的方式有它丝滑吗?

    目录 什么是建造者模式 为什么要使用建造者模式 构造函数创建对象 set方式构建对象 java实现建造者模式 第一种实现方式 第二种方式 建造者模式与构造函数的对比 建造者模式与工厂模式的对比 总结 ...

  5. java - 建造者模式

    2019独角兽企业重金招聘Python工程师标准>>> 1,定义: 建造者模式也叫生成器模式,将一个复杂对象的构件与它的标识分离,使得同样的构建过程可以构件不同的标识. 2,通用类图 ...

  6. Java建造者模式(Builder pattern)

    模式简介 建造者模式又称生成器模式,所属创建型设计模式,它提供了一种最佳的创建对象方式,将多个简单的对象一步一步构建成一个复杂的对象.对于用户而言,无需知道创建过程和内部组成细节,只需直接使用创建好的 ...

  7. Java建造者模式详解

    前言 在生活中,有这么一种场景,当需要去4S店买车时,会根据个人的预算,卖家会给你推荐同一个品牌的相应的低配,中配或高配版,在网上购买毕笔记本时也会遇到类似的情况,但不管是汽车也好,还是电脑,它们基本 ...

  8. JAVA 建造者模式

    文章目录 介绍 建造者模式(实现) 介绍 描述 建造者模式设计模式属于创建型模式,通过多个简单的对象去简化一个复杂对象的构建.通过构建和装配的解耦,不同的构建器,也可以做出不同的对象,相同的构建器由于 ...

  9. java建造者模式--给一个你一看就懂的建造者模式

    在开始写这个建造者模式的文章前,我也确实看了挺多次其他介绍这个模式的文章.感觉看了很多次才有一点对建造者模式明白透彻的感觉.细心想来,可能是接口的理解不好,平时工作比较少用到过建造者模式,所以理解的比 ...

  10. Java建造者模式(生成器模式)

    基本介绍: 建造者模式又叫生成器模式,是一种对象构建模式.它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象 建造者模式是一步一步建造一个复杂 ...

最新文章

  1. Centos 7 让docker飞一会儿
  2. 鸿海拟将相关物流企业在中国大陆上市
  3. tensorflow 模型压缩
  4. 基于OpenCV进行相机标定
  5. Winform中怎样设置ContextMenuStrip右键菜单的选项ToolStripMenuItem添加照片
  6. 开源|如何开发一个高性能的redis cluster proxy?
  7. 机器学习(三十一)——Linear Discriminant Analysis
  8. python对象三个特性_百度资讯搜索_python对象三个特性
  9. groovy lambda_Java Lambda流和Groovy Clouse的比较
  10. string插入字符_String类
  11. springboot thymeleaf 引入jquery_超详细实战:SpringBoot高级之autoconfigure自动化配置
  12. postfix所谓的监控功能只是利用sender_bcc而已
  13. 深度学习——最优化的学习笔记
  14. 李煜东算法进阶指南打卡题解
  15. 试试Navicat和Axere RP Pro吧
  16. CA证书无法与服务器连接,湖北国税常见CA登陆问题的解决办法
  17. Android 签名板
  18. 【技术美术图形部分】纹理基础2.0-凹凸映射
  19. 考研逻辑整理 - 概念和概念的种类
  20. 青青草php,青青草原博客

热门文章

  1. kubectl查看node状态_全栈之路:使用pm2自动化部署node项目
  2. 05 - 微信小程序实例开发 - 综合小娱乐
  3. cobbler命令_Cobbler部署详细教程基于Centos7.5
  4. linux系统gpk-update-icon进程占用CPU资源100%
  5. (补)算法训练Day13 | LeetCode150. 逆波兰表达式求值(栈应用);LeetCode239. 滑动窗口最大值(单调队列);LeetCode347. 前K个高频元素(小顶堆,优先级队列)
  6. 视频转换为swf格式
  7. CMAC--基于分组密码的消息认证码的实现及其应用
  8. 如何用音标来想到单词
  9. 齐博 src=/do/js.php?id=775,齐博CMS列表页,内容页的边栏,用不同的模板显示的方法...
  10. 从业务分析到系统建模、研发 基本方法论