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


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

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

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

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

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

    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;
    		}
    	}
    }
    
    
  • 相关阅读:
    Linux filesystem
    centos 下 gradle 编译打包 apk
    python SSL 错误
    nginx 缓存配置
    nginx 反向代理配置
    redhat 网卡绑定
    磁盘阵列
    Centos 安装Django2.1
    python pyquery 基本用法
    python 爬虫之-- 正则表达式
  • 原文地址:https://www.cnblogs.com/kristse/p/singletonpattern.html
Copyright © 2020-2023  润新知