设计模式之使用静态块,静态内部类,枚举类实现单例模式
2017-11-07 21:23
926 查看
传统的实现单例模式的方式:
http://blog.csdn.net/uncle_gy/article/details/77962501
单例模式和多线程:
http://blog.csdn.net/uncle_gy/article/details/78470486
运行结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201711/07/a570623746880c50fb85a1e2d9cce72b)
运行结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201711/07/2e1cd4c43ce58e650920adee734c41ec)
在枚举类中构造方法是私有的,不允许外界调用,在使用时自动调用,这符合单例模式的要求。
运行结果:
http://blog.csdn.net/uncle_gy/article/details/77962501
单例模式和多线程:
http://blog.csdn.net/uncle_gy/article/details/78470486
主体代码
class MyObject{ //这是具体的实现方法 } class MyThread extends Thread{ @Override public void run(){ System.out.println(Thread.currentThread()+" "+MyObject.getInstance().hashCode()); } } public class SingleMain{ public static void main(String[]args){ MyThread thread1=new MyThread(); MyThread thread2=new MyThread(); MyThread thread3=new MyThread(); thread1.start(); thread2.start(); thread3.start(); } }
使用静态内部类实现
class MyObject{ private static class MyObjectHandler{ private static MyObject myObject=new MyObject(); } private MyObject(){} public static MyObject getInstance(){ return MyObjectHandler.myObject; } }
运行结果:
使用static代码块实现
class MyObject{ public static MyObject myobject=null; private MyObject(){} static { myobject=new MyObject(); } public static MyObject getInstance(){ return myobject; } }
运行结果:
使用enum枚举类型实现
什么是枚举类型
下面的代码定义了3种颜色,包括颜色的编号和名称,在枚举类中构造方法是私有的,不允许外界调用,在使用时自动调用,这符合单例模式的要求。
enum Color{ RED("red",0),ORANGE("orange",1),YELLOW("yellow",2); private String name; private int num; private Color(String name,int num){ this.name=name; this.num=num; } public String getName(){ return this.name; } public int getNum(){ return this.num; } } public class MyEnum{ public static void main(String[] args){ System.out.println("颜色名称"+Color.RED.getName()+" 颜色编号"+Color.RED.getNum()); } }
用枚举类实现单例模式
class MyObject{ } class AssistantObject{ public enum MyEnumClass{ RealObject(new MyObject()); private MyObject myobject; private MyEnumClass(MyObject myobject){ this.myobject=myobject; } public MyObject getInstance(){ return this.myobject; } } public static MyObject getInstance(){ return MyEnumClass.RealObject.getInstance(); } }
运行结果:
相关文章推荐
- 使用静态内部类实现单例设计模式
- 设计模式之使用Enum来实现strategy(策略模式系列2)
- 设计模式应用之使用COMPOSITE模式实现流程(二)
- PHP设计模式笔记:使用PHP实现单例模式
- 设计模式应用之使用COMPOSITE模式实现流程(四)
- 设计模式- 使用抽象工厂实现多数据库切换实现过程
- 使用设计模式实现Undo,Redo框架
- 使用C++实现设计模式(连载): 第一回 Singleton 单例模式
- JTABLE 一个小格子添加2个按钮实现国际化 使用观察者设计模式
- PHP设计模式笔记:使用PHP实现门面模式
- 设计模式-使用php实现工厂方法模式
- 使用观察者模式实现Java应用程序设计MVC模式
- PHP设计模式笔记:使用PHP实现工厂模式
- 《Effective C#》读书笔记——条目25:用事件模式实现通知<使用C#表达设计>
- php使用接口实现工厂设计模式
- PHP设计模式笔记:使用PHP实现适配器模式
- 怎样使用Java实现Factory设计模式
- 使用C++实现设计模式(连载): 第二回 Factory 工厂模式
- C#设计模式之 :Abstract_Factory模式(使用接口实现)
- PHP设计模式笔记:使用PHP实现单例模式