单例模式

来源:互联网 发布:七月算法机器学习视频 编辑:程序博客网 时间:2024/06/06 01:05

一个单例的程序,了解单例的实现方式。不考虑线程安全问题
单例:在程序运行期间只允许有一个对象。
先简单的说下饿汉和懒汉的实现方式,在端上代码。

饿汉式:
1.私有化构造器,防止外部随意创建对象。
2.在类内部创建对象。(类内部声明私有的静态引用变量,并创建唯一的对象,将对象的地址写入该引用变量)
3.给外界提供公共静态方法用于获取类中唯一的对象。

懒汉式:
1.私有化构造器,防止外部随意创建对象。
2.声明私有静态引用,但此时不创建对象。
3.给外界提供公共静态方法用于获取类中唯一的对象。在此方法中,先对引用变量进行判断,若为null,创建对象并写入地址,若不为null,不创建对象。

饿汉式和懒汉式,区别在于何时创建对象,饿汉引用一声明好就创建,不管有没有,懒汉式,先判断有没有,再根据需要进行对象的创建。

/*  单例模式*///饿汉class Singleton1 {    //私有化构造器,防止外界随意创建对象    private Singleton1() {}    //声明一个static型的引用变量,并创建一个唯一的对象对它进行初始化赋值    private static Singleton1 only = new Singleton1();    //对外界提供一个公共获取对象的方法    public static Singleton1 getInstance() {        return only;    }}//懒汉class Singleton2 {    //私有化构造器,防止外界随意创建对象    private Singleton2() {}    //声明一个静态的引用变量,用来保存对象的地址,但是此时不创建对象    private static Singleton2 only;    //对外界提供一个公共的获取对象的方法    public static Singleton2 getInstance() {        if(only == null) {            only = new Singleton2();        }        return only;    }}class Singleton1Test {    public static void main(String[] args) {        Singleton1 s1 = Singleton1.getInstance();        Singleton1 s2 = Singleton1.getInstance();        //通过判断两个对象的地址是否一致,来看是否是唯一对象        System.out.println(s1 == s2);        Singleton2 s3 = Singleton2.getInstance();        Singleton2 s4 = Singleton2.getInstance();        System.out.println(s3 == s4);    }}

单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式的好处:
1.某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2.省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
3.有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(就好像一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。

不忘初心。
上进,胆大,不墨迹。
敢想敢做

2 0