码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式--1.单例模式

时间:2016-07-09 17:45:22      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

1. 定义
单例模式,就是确保在整个系统中某个类只有一个实例,这个实例向整个系统提供服务。
2. 优点
(1) 节省内存开支
(2) 减少系统性能开销,当一个对象的产生需要较多资源(如,读取配置,产生其它依赖对象),可以在系统
启动时直接产生一个单例对象,jvm要注意垃圾回收
(3) 避免对资源的多重占用,如写文件
3. 缺点
(1) 没有接口,扩展困难
(2) 单例模式与单一职责相冲突
4.应用场景
(1) 要求生成唯一序列号的环境
(2) 在整个web项目中需要一个共享数据,如web页面上的计数器,使用单例 保存,并确保线程安全
(3) 创建一个对象,需要消耗过多资源,如访问IO和数据库资源
5.注意事项
(1) 高并发情况下,注意线程安全
(2) 如果单例的类实现了Cloneable类,则对象是可复制的,所以类不要实现Cloneable接口

 

 1 public class SingleTon {
 2     private static SingleTon st = null;
 3     private SingleTon(){}
 4     
 5     public static synchronized SingleTon getInstance(){
 6         
 7         if(st == null){
 8             st = new SingleTon();
 9         }
10         
11         return st;
12     }
13 }
14 
15 /*
16  * 扩展:多例模式
17  */
18 class Multiton {
19     
20     private final static Integer multiNum = 2;
21     private static List<Multiton> multiTonList = new ArrayList<Multiton>();
22     private static int countNum = 0;
23     private String name;
24     
25     private Multiton(){}
26     
27     static {
28         for(int i = 0 ; i < multiNum ; i ++){
29             Multiton mt = new Multiton();
30             mt.setName("Name-" + i);
31             multiTonList.add(mt);
32         }
33     }
34     
35     public static Multiton getMultiton(){
36         Random random = new Random();
37         //在0-1之间随机取一个数小
38         countNum = random.nextInt(multiNum);
39         
40         return multiTonList.get(countNum);
41     }
42     
43     public String getName() {
44         return name;
45     }
46 
47     public void setName(String name) {
48         this.name = name;
49     }
50 
51     
52     
53 }

 

设计模式--1.单例模式

标签:

原文地址:http://www.cnblogs.com/fubaizhaizhuren/p/5656201.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!