Java面向对象之单例模式

吃可爱长大的小学妹 提交于 2021-01-09 01:25:09

设计模式:

反复使用、经过分类编目、代码设计经验、多数人知晓的总结。众多的软件开发人员在软件开发过程中面临的一般问题的解决方案。

借鉴前辈的套路,稍加变化,就可以完成构建了。

桥接模式、适配器模式、状态模式、抽象工厂模式、备忘录模式、工厂方法模式、代理模式、责任链模式、观察者模式、模板方法模式、策略模式、建造者模式、解释器模式、组合模式、享元模式、中介者模式、外观模式、单例模式、命令模式、访问这模式、迭代子模式、原型模式、装饰器模式。

关注对象创建过程的设计模式:创建型模式。

设计模式是基于场景的解决方案。

如果某个新场景的解决方案被认可,那我们就可以定义一个新的设计模式。

关注类和对象组合的模式:结构型模式。

关注对象之间的通信过程:行为型模式。

 

2.在计算机系统中,无论这台机器连接了多少台打印机,后台处理程序只有唯一的程序在工作。这样才不会出现,混乱的交错的情况。包括各种驱动程序,线程池,缓存,日志,很多时候都只需要有且只有一个实例在工作。

单例模式 目的:使得类的一个对象成为该类系统中的唯一实例。

定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供。

要点:1.某个类只能有一个实例。2.必须自行创建实例 3.必须自行向整个系统提供这个实例。

实现:

1.只提供私有的构造方法。(限制了在类外实例化对象的渠道)。

2.含有一个该类的静态私有对象。

3.提供一个静态的公有方法用于创建、获取静态私有对象。

代码实现:

饿汉式:对象创建过程中实例化。

package com.immoc.singleton;


public class SingleTonOne {
    //	1.创建类中私有构造
	private SingleTonOne() {
		
	}
	
	// 2.创建该类型的私有静态实例
	private static SingleTonOne instance = new SingleTonOne();
	
	// 3.创建公有静态方法返回静态实例对象
	public static SingleTonOne getInstance() {
		return instance;
	}
}

在测试类用new关键字实例化发现报错,原因是此类构造方法被私有化了:

调用类的getInstance方法 典型的空间换时间:在类加载的时候,就完成了实例化操作。不管你用或者不用先建在那里直接拿。相对而言速度快,空间大。

package com.immoc.test;

import com.immoc.singleton.SingleTonOne;

public class Test {
	public static void main(String[] args) {
		SingleTonOne singleTonOne   =  SingleTonOne.getInstance();
		SingleTonOne singleTonTwo = SingleTonOne.getInstance();
		System.out.println(singleTonOne==singleTonTwo); //true
	}
}

懒汉式:静态公有方法中实例化。 (只有在用到的时候才会进行实例化的创建操作)

package com.immoc.singleton;
// 懒汉式:类内实例对象创建时并不初始化,直到第一次调用get方法时,才完成初始化操作
public class SingleTonTwo {
	// 1、创建私有构造方法
	private SingleTonTwo() {
		
	}
	
	// 2.创建静态的该类实例对象
	private static SingleTonTwo instance = null;
	
	// 3.创建开放的静态方法提供实例对象
	public static SingleTonTwo getInstance() {
		if(instance==null) {
			instance=new SingleTonTwo();
		}
		return instance;
	}
}

 

测试类:结果也是true。时间换空间。

SingleTonTwo singleTon   =  SingleTonTwo.getInstance();
		SingleTonTwo singleTon2 = SingleTonTwo.getInstance();
		System.out.println(singleTon==singleTon2); //true

 

 

 

单例模式:

优点:1.在内存中只有一个对象,节省内存空间。

2.避免频繁的创建销毁对象造成的性能损耗,提高性能。

3.避免共享资源多重占用。

缺点:

1.扩展比较困难。

2.如果实例化后的对象长期不利用,系统将默认为垃圾进行回收,造成对象状态丢失。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!