设计模式 -- 单例模式
来源:互联网 发布:s函数可以用c语言写吗 编辑:程序博客网 时间:2024/05/29 14:05
参考:http://www.runoob.com/design-pattern/singleton-pattern.html
源码下载:https://github.com/gpqhl0071/pattern.git
1. 对象在整个工程的运行周期内,值创建一个对象
代码
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.single;public class SingleObject { // 创建 SingleObject 的一个对象 private static SingleObject instance = new SingleObject(); // 让构造函数为 private,这样该类就不会被实例化 private SingleObject() { } // 获取唯一可用的对象 public static SingleObject getInstance() { return instance; } public void showMessage() { System.out.println("Hello World!"); }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.single.test;import com.pattern.single.SingleObject;public class SingletonPatternDemo { public static void main(String[] args) { // 不合法的构造函数 // 编译时错误:构造函数 SingleObject() 是不可见的 // SingleObject object = new SingleObject(); // 获取唯一可用的对象 SingleObject object = SingleObject.getInstance(); // 显示消息 object.showMessage(); }}
结果:
Hello World!
6中单例的实现,代码如下:
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.single;/** * 懒汉式,线程不安全 * @author: gao peng * @date: 2016年3月3日 上午11:33:16 * */public class Singleton1 { private static Singleton1 instance; private Singleton1() { } public static Singleton1 getInstance() { if (instance == null) { instance = new Singleton1(); } return instance; }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.single;/** * 懒汉式,线程安全 * @author: gao peng * @date: 2016年3月3日 上午11:34:11 * */public class Singleton2 { private static Singleton2 instance; private Singleton2 (){} public static synchronized Singleton2 getInstance() { if (instance == null) { instance = new Singleton2(); } return instance; }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.single;/** * 饿汉式 * @author: gao peng * @date: 2016年3月3日 上午11:34:39 * */public class Singleton3 { private static Singleton3 instance = new Singleton3(); private Singleton3() { } public static Singleton3 getInstance() { return instance; }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.single;/** * 双检锁/双重校验锁(DCL,即 double-checked locking) * @author: gao peng * @date: 2016年3月3日 上午11:35:21 * */public class Singleton4 { private volatile static Singleton4 Singleton4; private Singleton4() { } public static Singleton4 getSingleton4() { if (Singleton4 == null) { synchronized (Singleton4.class) { if (Singleton4 == null) { Singleton4 = new Singleton4(); } } } return Singleton4; }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.single;/** * 登记式/静态内部类 * @author: gao peng * @date: 2016年3月3日 上午11:36:20 * */public class Singleton5 { private static class Singleton5Holder { private static final Singleton5 INSTANCE = new Singleton5(); } private Singleton5() { } public static final Singleton5 getInstance() { return Singleton5Holder.INSTANCE; }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.single;/** * 枚举 * @author: gao peng * @date: 2016年3月3日 上午11:37:07 * */public enum Singleton6 { INSTANCE; public void whateverMethod() { } }
0 0
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 设计模式-单例模式
- [设计模式] 单例模式
- 设计模式--单例模式
- 设计模式---单例模式
- 设计模式--单例模式
- 设计模式 -----单例模式
- 设计模式:单例模式
- equals方法避免空指针的比较方法
- 动态开辟二维数组
- Effective C++读书笔记 条款03:尽可能使用const
- vi编辑器常用命令总结
- php-fpm的静态和动态执行方式比较
- 设计模式 -- 单例模式
- index.html
- [Android 性能优化系列]那些不能忽略的小细节
- LruCache
- Nodejs+MySQL
- 深入理解HashMap
- 链表逆置
- mysql数据库设置默认字符集
- tomcat中动态部署