Effective java 第2版 - 笔记(01) 单例(Singleton)的枚举(enum)实现

直接上代码:

 1 public enum Boss {
 2
 3     INSTANCE;
 4
 5     private String name;
 6
 7     public void doSomeThing() {
 8         System.out.println(name + " is doing something now...");
 9     }
10
11     public String getName() {
12         return name;
13     }
14
15     public void setName(String name) {
16         this.name = name;
17     }
18
19 }

注:java中的enum是一个彻彻底底的class,可以自由添加其它属性、方法,所以完全可以当成一个class来用。

 

验证:

 1     @Test
 2     public void testSingleton() {
 3
 4         Boss b1 = Boss.INSTANCE;
 5         b1.setName("张三");
 6         b1.doSomeThing();//张三 is doing something now...
 7
 8         Boss b2 = Boss.INSTANCE;
 9         b2.doSomeThing();//张三 is doing something now...
10
11         System.out.println(b1.equals(b2));//true
12
13     }

11行输出的true,已经证明了b1与b2是同一个对象,而且这种方式绝对防止反射调用私有构造器来破坏单例。

时间: 2024-09-20 00:27:13

Effective java 第2版 - 笔记(01) 单例(Singleton)的枚举(enum)实现的相关文章

JAVA之旅(六)——单例设计模式,继承extends,聚集关系,子父类变量关系,super,覆盖

JAVA之旅(六)--单例设计模式,继承extends,聚集关系,子父类变量关系,super,覆盖 java也越来越深入了,大家加油吧!咱们一步步来 一.单例设计模式 什么是设计模式? JAVA当中有23种设计模式,解决某一问题最有效的方法 单例设计模式 解决一个类在内存中只存在一个对象 想要保证对象唯一该怎么做> 1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象 2.还为了让其他程序访问到该类对象,只好在本类中自定义一个对象 3.为了方便其他程序对自定义对象的访问,可以对外提供

如果主程序中有单例(Singleton)实现,那在不同的AppDomain里访问时,会导致单例失效

问题描述 如果主程序中有单例(Singleton)实现,那在不同的AppDomain里访问时,会导致单例失效为什么会失效? 解决方案 解决方案二:什么叫在不同的AppDomain里访问解决方案三:所谓单例,是指类啊如果你的主程序本身被打开了2个,这跟里面的类有什么关系你需要保证主程序只能有一个实例,而不是里面的类是否是单例模式解决方案四:不是,我的主程序要求是一个单例,但是有两个domain,可以直接调用吗?解决方案五:系统是多用户的?如果你做的"主程序"并不是一个跟用户交互的程序,你

Android应用开发提高系列(3)——《Effective Java 中文版》读书笔记

声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com   书籍 <Effective Java 中文版> 03版 潘爱民译 本书介绍了57条极具实用价值的经验规则.这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案,通过对Java平台设计专家所使用的技术的全面描述,揭示了应坐什么和不应做什么,才能产生清晰.健壮和高效的代码.   正文  注意:条目和用语可能与书籍有所出入,但尽

java web-Struts里的action是单例,那这个单例是什么意思?

问题描述 Struts里的action是单例,那这个单例是什么意思? Struts里的action是单例,那这个单例是什么意思?Struts里的action是单例,那这个单例是什么意思? 解决方案 首先action不是单例.这里说的单例,是设计模式里提到的单例模式(singleton),一个程序这个类型只有一个对象实例. 解决方案二: struts 2的Action是多实例的并非单例,也就是每次请求都会产生一个Action的对象.Servlet是单例的,也就是整个应用中每个被请求到的Servle

Ruby设计模式透析:单例(Singleton)

写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你 分析数据,但是Ruby原生带有的puts方法却很少在真正的项目开发中使用. 为什么作为Ruby新 手神器的puts,到了真正项目开发当中会被唾弃呢?其实只要细细分析,你就会发现它的很多弊端.比 如不可控制,所有的日志都会在项目上线后照常打印,从而降低运行效率:又或者不能将日志记录到本 地文件,一旦打印被清除,日志将再也找不回来:再或者打印的内容没有Tag区分,你将很难辨别这一 行日志是在哪个类里打印的. 你的

Java设计模式透析:单例(Singleton)

写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助 你分析数据.但是Java原生带有的System.out.println()方法却很少在真正的项目开发中使用,甚至 像findbugs等代码检查工具还会认为使用System.out.println()是一个bug. 为什么作为Java 新手神器的System.out.println(),到了真正项目开发当中会被唾弃呢?其实只要细细分析,你就会 发现它的很多弊端.比如不可控制,所有的日志都会在项目上线后照常打印,从

单例(Singleton)模式

如果要保证系统里一个类最多只能存在一个实例时,我们就需要单例模式. public class Singleton{ public static Singleton instance=new Singleton(); //other fields private Singeton(){} public static Singleton getInstance(){ return instance; } //other methods } public class ThreadSafeSinglet

Effective Java 电子书 apk版本下载

下载安装包以后,安装即可阅读该书了,并且实时展示每章节代码哦,并且可以运行哦,赶快下载体验吧. Effective Java中文第二版下载地址:下载   应用截图:        

Java实现单例模式之饿汉式、懒汉式、枚举式_java

单例模式的实现(5种) 常用: 饿汉式(线程安全,调用效率高,但是不能延时加载) 懒汉式(线程安全,调用效率不高,可以延时加载) 其他: 双重检测锁式(由于jvm底层内部模型原因,偶尔会出问题,不建立使用) 静态内部类式(线程安全,调用效率高,但是可以延时加载) 枚举单例(线程安全,调用效率高,不能延时加载) 饿汉式单例具体代码如下: package com.lcx.mode; /** * * 饿汉式单例,不管以后用不用这个对象,我们一开始就创建这个对象的实例, * 需要的时候就返回已创建好的实