首页 > 其他 > 详细

设计模式学习笔记-单例模式

时间:2020-02-01 21:47:03      阅读:85      评论:0      收藏:0      [点我收藏+]

运行过程中只有一个对象,可防止一个或多个类调用时,产生多个对象,发生错误。
有些对象我们只需要一个:线程池、缓存、硬件设备等
如果多个实例会有造成冲突、结果的不一致性等问题

最典型的例子:打印机打印东西,在学校打印的时候,几台打印机一起工作,如果不使用单例模式,打出来的纸张就会混在一起,这是我实际生活中碰到的问题

用静态变量方式来实现
程序员之间协商个全局变量

这两个都是实际使用中单例的思想

单例模式:确保一个类最多只有一个实例,并提供一个全局访问点

技术分享图片

package com.java.jikexueyuan.singleton;

public class Singleton {
    
    private static Singleton uniqeInstance=null;

    //这个构造对象是私有的,杜绝了外面构造这个对象的可能
    private Singleton(){
        
    };

    //只能调用这个类里面自己写的这个构造函数来构造
    public static Singleton getInstance()
    {
        //第一次调用时,判断uniqeInstance是否为空,为空就new一个新的,不为空直接返回,保证了始终只有一份实例对象
        if(uniqeInstance==null)
        {
            uniqeInstance=new Singleton();
        }
        return uniqeInstance;
        
    }

}

案例一:巧克力工厂

package com.java.jikexueyuan.singleton;

public class ChocolateFactory {

    private boolean empty;
    private boolean boiled;
    //双重检查加锁
    public volatile static ChocolateFactory uniqueInstance = null;

    //私有构造函数
    private ChocolateFactory() {
        empty = true;
        boiled = false;
    }

    public static ChocolateFactory getInstance() {

        if (uniqueInstance == null) {
            //考虑多线程的情况
            //这里使用了线程锁,保证第一个线程完成了,才能执行
            synchronized (ChocolateFactory.class) {
                if (uniqueInstance == null) {
                    uniqueInstance = new ChocolateFactory();
                }
            }
        }

        return uniqueInstance;

    }

    public void fill() {
        if (empty) {
            // 添加原料巧克力动作
            empty = false;
            boiled = false;
        }
    }

    public void drain() {
        if ((!empty) && boiled) {
            // 排出巧克力动作
            empty = true;
        }
    }

    public void boil() {
        if ((!empty) && (!boiled)) {
            // 煮沸
            boiled = true;
        }
    }
}

设计模式学习笔记-单例模式

原文:https://www.cnblogs.com/kristse/p/singletonpattern.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!