基于JAVA的设计模式之单例模式

时间:2019-06-24 14:44:30   收藏:0   阅读:120

    于大二上学期面向对象C++期中考试中有这么道题:一个Computer有多个USB插口,那么意味着这台电脑可以插多个鼠标,但是无论你如何拔插多少个鼠标,桌面上的鼠标一直只显示一个,且多个硬件鼠标都可以操控这个桌面上的鼠标,就这个场景进行程序设计。当时由于没有接触过设计模式当场就蒙蔽了,现在想起来较为简单。

    单利模式保证内存中有且仅有一个对象,对内私有化构造函数,对外提供静态的获取对象引用的方法。

//饿汉模式
public class Mouse {
    private String name;
    private Mouse(){
        System.out.println("初始化对象");
    }
    private static final Mouse instance=new Mouse();
    public static Mouse getInstance(){
        return instance;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public static void load(){}
}

public class Main {
    public static void main(String[] args) {
        //Mouse mouse1=Mouse.getInstance();
        //mouse1.setName("鼠标");
        //Mouse mouse2=Mouse.getInstance();
        //System.out.println(mous/e1.getName()+":"+mouse2.getName());
        //鼠标:鼠标
        Mouse.load();
    }
}
//懒汉模式
public class Mouse {
    private String name;
    //去掉final
    private static Mouse instance=null;
    public static Mouse getInstance(){
        if(instance==null){
            instance=new Mouse();
        }
        return instance;
    }
    private Mouse(){
        System.out.println("初始化对象");
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

    创建对象的时机不同,饿汉是加载类时就创建,用load()方法证明了,懒汉是随用随创建,这就导致了饿汉模式造成了内存浪费。但是懒汉模式在多线程的情况下,由于判空条件(if instance == null)就会导致对象的不唯一性发生

public static synchronized Mouse getInstance(){
        if(instance==null){
            instance=new Mouse();
        }
        return instance;
    }

public static Mouse getInstance(){
        synchronized (Mouse.class) {
            if (instance == null) {
                instance = new Mouse();
            }
        }
        return instance;
    }

原文:https://www.cnblogs.com/hbsdljz/p/11076700.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!