单例模式(一)

    xiaoxiao2024-11-30  56

    单例模式(Singleton Pattern),又称单体模式,解决的问题是保证一个类在内存中对象的唯一性(类只有一个实例)。

    定义

    将类的责任集中到唯一的单体对象中,确保该类只有一个实例,并且为该类提供一个全局访问点。(难点不在单体模式的实现,在于系统中任何识别单体和保证单体的唯一性)

    单例模式如何保证对象的唯一性?

    不允许其他程序用new创建该对象。在该类中创建一个本类实例。对外提供一个方法让其他程序获取该对象。

    单例模式保证对象唯一性的步骤?(和上面对应)

    私有化构造函数。private Singleton(){—}。如果不把构造器声明为private或protected,编译器会自动创建一个public的构造函数。使用静态域(static)来维护实例。将单体对象作为单体类的静态域实例化,其类型就是单例类型本身。private static Singleton s = null; 如果不想其被重载,加上final。使用静态方法监视实例的创建(分为饿汉式和懒汉式)。 // 饿汉式: public class Singleton { private final static Singleton instance = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return s; } } //懒汉式 public class Singleton { private static Singleton instance = null; private Singleton() {} public static Singleton getInstance() { if(instance == null) { instance = new Singleton(); return instance; } }

    第一种叫饿汉式,开发时使用比较多,类一创建,对象就创建。这种方式浪费了内存。(内存中有静态区和非静态区) 第二种类加载时没有对象,只有调用了getInstance()方法时才会创建对象,此时创建的也是普通的实例,注意对比着看,这种事延迟加载,节省内存,但是在多线程并发访问时,可能保证不了对象的唯一性。


    上一篇: 责任链模式 下一篇: 单例模式(二)

    最新回复(0)