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

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 }
原文地址:https://www.cnblogs.com/fubaizhaizhuren/p/5656201.html