炒冷饭系列:设计模式 单例模式

来源:互联网 发布:科比00年总决赛数据 编辑:程序博客网 时间:2024/06/11 11:16

炒冷饭系列:设计模式 单例模式

摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢!

亲爱我,孝何难;亲恶我,孝方贤。

一、什么是单例模式

单例模式是一种对象创建型模式,使用单例模式, 可以保证为一个类只生成唯一的实例对象。也就是说, 在整个程序空间中,该类只存在一个实例对象。 其实,GoF对单例模式的定义是:保证一个类、 只有一个实例存在,同时提供能对该实例加以访 问的全局访问方法。

二、为什么要使用单例模式呢?

在应用系统开发中,我们常常有以下需求:

  • - 在多个线程之间,比如servlet环境,共享同一个资源或者操作同一个对象
  • - 在整个程序空间使用全局变量,共享资源
  • - 大规模系统中,为了性能的考虑,需要节省对象的创建时间等等。

因为Singleton模式可以保证为一个类只生成唯一的实例 对象,所以这些情况,Singleton模式就派上用场了。

三、单例模式实现

1.饿汉式。

复制代码
public class Person {    public static final Person person = new Person();    private String name;        public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }        //构造函数私有化    private Person() {    }        //提供一个全局的静态方法    public static Person getPerson() {        return person;    }}
复制代码

2.懒汉式。

复制代码
public class Person2 {    private String name;    private static Person2 person;        public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }        //构造函数私有化    private Person2() {    }        //提供一个全局的静态方法    public static Person2 getPerson() {        if(person == null) {            person = new Person2();        }        return person;    }}
复制代码

3.双重检查。

复制代码
public class Person3 {    private String name;    private static Person3 person;        public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }        //构造函数私有化    private Person3() {    }        //提供一个全局的静态方法,使用同步方法    public static synchronized Person3 getPerson() {        if(person == null) {            person = new Person3();        }        return person;    }}
复制代码
复制代码
public class Person4 {    private String name;    private static Person4 person;        public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }        //构造函数私有化    private Person4() {    }        //提供一个全局的静态方法    public static Person4 getPerson() {        if(person == null) {            synchronized (Person4.class) {                if(person == null) {                    person = new Person4();                }            }        }        return person;    }}
复制代码

MainClass:

复制代码
public class MainClass {    public static void main(String[] args) {        Person2 per = Person2.getPerson();        Person2 per2 = Person2.getPerson();        per.setName("zhangsan");        per2.setName("lisi");                System.out.println(per.getName());        System.out.println(per2.getName());    }}
复制代码

四、感谢知识来源和小结

来自:java设计模式

如以上文章或链接对你有帮助的话,别忘了在文章按钮或到页面右下角点击 “赞一个” 按钮哦。你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。

亲有过 谏使更 怡吾色 柔吾声 谏不入 悦复谏 号泣随 挞无怨
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 养狗后悔了怎么办 买狗后悔了怎么办 小孩子不想去幼儿园怎么办 小孩子不想上幼儿园怎么办 想当兵视力不够怎么办 当兵裸眼视力差怎么办 去公司报道行李怎么办 报道第一天出糗怎么办 痛经一直想拉屎怎么办 月经第一天痛经怎么办 痛经痛得厉害怎么办 脑子里老是幻想怎么办 绿松石盘玩变黑怎么办 绿松石发乌了怎么办 泡脚泡的脚发黑怎么办 想当兵有纹身怎么办 小孩挨打不会还手怎么办 孩子挨打不敢还手怎么办 武警森林改革新兵怎么办 森林武警新兵后来怎么办 部队训练打死人怎么办? 部队受伤退伍后怎么办 60岁失地养老怎么办 梦遗到被子上怎么办 血管打针打的硬怎么办 征兵彩超不过怎么办? 警卫局退役新兵怎么办 有轻微的肾结石怎么办 部队改制边防义务兵怎么办 在部队班长打人怎么办 肾结石在上盏怎么办 带新兵废嗓子怎么办 部队干部想复原怎么办 眼睛度数越来越高怎么办 驾照视力不够4.9怎么办 矫正视力达不到1.0怎么办 原材料复检批次不足怎么办 二年级视力4.5怎么办 儿童400度近视怎么办 境外汇款退回该怎么办 小米快件被退回怎么办