java设计模式--单利
来源:互联网 发布:unity3d创建场景 编辑:程序博客网 时间:2024/05/26 12:53
看了不少博客,今天总结一下实际使用中用的。
这里明确,单利存在线程安全,不讨论为什么有这个问题(自己写个多线程测测就知道)
这里不讨论懒汉模式。(估计面试的时候都背过。。)
这里不讨论普通的恶汉模式和双重锁模式(后面备注一下即可)
这里讨论。。。
1.用静态内部类实现的单利和枚举实现的单利
a.静态内部类的实现:
package com.practice.shejimoshi;import java.util.Properties;/** * 设计模式:单利模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 * <p/> * <p/> * Created by guojiangjiang on 2017/2/9. */public class SingltonTest { private static String path = ""; private static Properties properties; //私有化构造方法 private SingltonTest(String path){ properties = readConfig(path); } //定义静态内部类 public static class SingltonHolder { //静态初始化,由jvm保证线程安全 public static SingltonTest singltonTest = new SingltonTest(path); } //提供获取对象的入口 public static SingltonTest getInstance(String path) { SingltonTest.path = path; return SingltonHolder.singltonTest; } //读取配置文件 private Properties readConfig(String path) { try { System.out.println("读取了 [" + path + "]下的配置文件..."); } catch (Exception e) { e.printStackTrace(); } return new Properties(null);// 只是测试,实际开发中返回真实properties对象 } public Properties getProperties() { return properties; }}
demo:
package com.practice.shejimoshi;import java.util.Properties;/** * Created by guojiangjiang on 2017/2/9. */public class MainTest { public static void main(String[] args) { Properties sin = SingltonTest.getInstance("classpath:config.properties").getProperties(); for (int i = 0; i < 3; i++) { System.out.println(sin); } //EnumSingltonTest em = EnumSingltonTest.uniquInstance; }}
b.枚举的实现方式:
package com.practice.shejimoshi;/** * Created by guojiangjiang on 2017/2/9. */public enum EnumSingltonTest { /** * 定义一个枚举的元素,它就代表了Singleton的一个实例 */ uniquInstance; private EnumSingltonTest() { } //读取配置文件 public String readConfig(String path) { try { System.out.println("读取了 [" + path + "]下的配置文件..."); } catch (Exception e) { e.printStackTrace(); } return "files"; }}
demo:
package com.practice.shejimoshi;import java.util.Properties;/** * Created by guojiangjiang on 2017/2/9. */public class MainTest { public static void main(String[] args) { /* Properties sin = SingltonTest.getInstance("classpath:config.properties").getProperties(); for (int i = 0; i < 3; i++) { System.out.println(sin); }*/ EnumSingltonTest em = EnumSingltonTest.uniquInstance; }}
2.备注双重锁的单利(扒拉博客的)
https://my.oschina.net/xianggao/blog/616385
0 0
- java设计模式--单利
- java设计模式,单利模式
- 【Java基础】单利设计模式
- java设计模式之单利模式
- JAVA设计模式之单利模式
- Java设计模式(三):单利模式
- JAVA设计模式之单利模式
- JAVA单利设计模式中的延迟加载
- 设计模式--单利模式
- 设计模式-单利模式
- 单利设计模式
- 单利设计模式
- 单利设计模式
- 设计模式-单利
- java单利模式
- java中单利模式
- java单利模式
- java 单利模式
- 【初等概率论】 02
- 区间覆盖问题 贪心
- composer安装tp5
- js 获取与清空下拉列表的值
- Activity之间的切换问题
- java设计模式--单利
- 利用bintray-release插件上传到Bintray- HTTP/1.1 404 Not Found [message:Repo 'maven' was not found]问题解决
- maven和eclispe整合
- MYSQL导出数据出现The MySQL server is running with the --secure-file-priv option so it cannot execute this
- 怎样养成Java编程事半功倍的好习惯
- HDU5014:Number Sequence(贪心)
- RecyclerView的瀑布流制作热门搜索效果
- 网络通信socket连接数上限
- JS 生成的元素事件绑定注意事项