博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
炒冷饭系列:设计模式 单例模式
阅读量:6202 次
发布时间:2019-06-21

本文共 2668 字,大约阅读时间需要 8 分钟。

hot3.png

摘要: 原创出处: 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设计模式

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

亲有过 谏使更 怡吾色 柔吾声 谏不入 悦复谏 号泣随 挞无怨

转载于:https://my.oschina.net/jeffli1993/blog/295430

你可能感兴趣的文章
Linux Shell if 条件判断
查看>>
第二课:第二讲Linux操作系统及常用命令
查看>>
day13 知识点串讲
查看>>
day32 sed-awk
查看>>
猜猜看,什么样的3D打印机能成为爆款?
查看>>
JSP 标准标签库(JSTL)
查看>>
linux PS1 提示符定义
查看>>
javascript与php实现openssl加密/解密
查看>>
春节后的求职高峰期,熟悉这些UI设计面试题帮你快速拿到offer
查看>>
【Git 第6课】 文件状态
查看>>
信息安全与Linux系统
查看>>
Java SPI及Demo
查看>>
tkinter模块常用参数(python3)
查看>>
在MAC平台下使用Eclipse出现了中文乱码
查看>>
OS X系统下通过终端命令搜索文件并导出列表
查看>>
学平面设计需要什么基础呢?
查看>>
来自AJPFX的二分法查找
查看>>
【配置模板】grunt配置
查看>>
我的友情链接
查看>>
npm 镜像
查看>>