大话设计模式-单例模式

单例模式(饿汉模式、懒汉模式)

概念:单例模式(Singleton Pattern)涉及一个单一的类,确保只有单个对象被创建。这个类提供一种访问其唯一对象的方式,可以直接访问,不需要实例化该类的对象。

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点

主要解决:一个全局使用的类频繁地创建和销毁

何时使用:当你想控制实例数目,节省系统资源的时候

如何解决:系统是否已经有这个实例,如果有则返回,如果没有则创建

关键点:私有化构造函数

应用实例:一台电脑的两台打印机不能同时打印同一个文件

优点
1.内存里只有一个实例,减少内存的开销(网站首页页面缓存)
2.避免对资源的多重占用(写文件操作)

缺点
没有接口,不能继承,与单一职责冲突,一个类应该只关心内部逻辑,而不关心外面实例化

使用场景
1.生成唯一序列号
2.WEB中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来
3.创建一个对象需要消耗的资源过多,比如I/O与数据库的连接等

实现
1.饿汉式单例模式:类加载时就创建单实例

package singleton;

/**
 * 饿汉式单例模式
 */
public class Singleton {

    //创建一个Singleton的对象
    private static Singleton instance = new Singleton();

    //私有化构造函数,这样类就不会被实例化
    private Singleton(){

    }

    //获取唯一一个可用的对象
    public static Singleton getInstance(){
        return instance;
    }

    public void show(){
        System.out.println("饿汉式单例模式!");
    }
}

package singleton;

/*
饿汉式测试类
 */
public class SingletonTest {

    public static void main(String[] args) {

        //获取唯一可用的对象
        Singleton object = Singleton.getInstance();

        //显示消息
        object.show();
    }
}

2.懒汉式单例模式:需要的时候才创建单实例

package singleton;

/**
 * 懒汉式单例模式
 */
public class Singleton2 {

    //创建一个Singleton的对象
    private static Singleton2 instance;

    //私有化构造函数,这样类就不会被实例化
    private Singleton2(){

    }

    //获取唯一一个可用的对象
    public static Singleton2 getInstance(){

        if(instance == null){
            //只会执行一次
            instance = new Singleton2();
        }
        return instance;
    }

    public void show(){
        System.out.println("懒汉式单例模式!");
    }
}

package singleton;

/*
懒汉式测试类
 */
public class SingletonTest2 {

    public static void main(String[] args) {

        //获取唯一可用的对象
        Singleton2 object = Singleton2.getInstance();

        //显示消息
        object.show();
    }
}

你可能感兴趣的:(设计模式,设计模式,java)