JAVA_SE基础——37.单例设计模式

本文继续介绍23种设计模式系列之单例模式。

我们在javaSE的基础学习中,会讲到:单例设计模式、模板设计模式、装饰者设计模式、观察者设计模式、工厂设计模式

我以后随着水平的提高,我会专门开个分类写设计模式的。现在请原谅我的知识面有限……

设计模式→中的    “模式” 二字是什么意思。。

模式:模式就是解决 一类 问题的固定步骤 。

模式的概念最早起源于建筑行业....

建房子的步骤都是一样子:

打地基-----> 浇柱子------->盖楼面--------->砌墙--------->封顶---->装修-----入住

单例设计模式:保证一个类在内存中只有一个对象。

首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了,

比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个,

这里就可以通过单例模式来避免两个打印作业同时输出到打印机中,

即在整个的打印过程中我只有一个打印程序的实例。简单说来,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个(当然也可以不存在)。

单例设计模式有两种: (但是写法很多种)

饿汉单例设计模式

1. 私有化构造函数。

2. 声明本类的引用类型变量,并且使用该变量指向本类对象。

3. 提供一个公共静态的方法获取本类的对象。

懒汉单例设计模式:

1. 私有化构造函数。

2. 声明本类的引用类型变量,但是不要创建对象,

3. 提供公共静态 的方法获取本类 的对象,获取之前先判断是否已经创建了本类 对象

,如果已经创建了,那么直接返回对象即可,如果还没有创建,那么先创建本类的对象,

然后再返回。

推荐使用: 饿汉单例设计模式。  因为懒汉单例设计模式会存在线程安全问题,目前还不能保证一类在内存中只有一个对象。 但是也要熟悉懒汉单例模式,因为面试经常会面这个。。

测试代码1:(饿汉单例模式):

//饿汉单例设计模式 ----> 保证Single在在内存中只有一个对象。
class Single{

	//声明本类的引用类型变量,并且使用该变量指向本类对象
	private static	Single s = new Single();

	//私有化构造函数
	private Single(){}

	//提供一个公共静态的方法获取本类的对象
	public	static  Single getInstance(){
		return s;
	}
}
class Demo2
{
	public static void main(String[] args)
	{
		Single s1 = Single.getInstance();
		Single s2 = Single.getInstance();
		System.out.println("是同一个对象吗?"+ (s1==s2));
	}
}

运行结果:

测试代码2:(懒汉单例模式):

//饿汉单例设计模式 ----> 保证Single在在内存中只有一个对象。
class Single{

	//声明本类的引用类型变量,并且使用该变量指向本类对象
	private static	Single s = null;

	//私有化构造函数
	private Single(){}

	//提供一个公共静态的方法获取本类的对象
	public	static  Single getInstance(){
		if(s==null){
			s = new Single();
		}
		return s;
	}
}
class Demo2
{
	public static void main(String[] args)
	{
		Single s1 = Single.getInstance();
		Single s2 = Single.getInstance();
		System.out.println("是同一个对象吗?"+ (s1==s2));
	}
}

运行结果:

懒汉式单例模式 ……关于线程问题也要等我再深入学习我才懂(我自己都没学到多线程)

反正这篇blog 就当作是入门文档了,不能当最终版本的,因为我的知识面有限,抱歉。关于单列模式的东西 目前我也才学到这些,期待我的文章的人,可以粉我,到时我会专门开个分类来详细的写设计模式的 。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-25 07:02:29

JAVA_SE基础——37.单例设计模式的相关文章

python基础之单例设计模式

class Player(): instance = None init_flag = False def __init__(self): if self.init_flag is False: print("初始化...") self.init_flag = True def __new__(cls, *args, **kwargs): if cls.instance is None: cls.instance = super().__new__(cls) return cls.in

黑马程序员--Java基础学习笔记【单例设计模式、网络编程、反射】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 设计模式分类: 创建模式:是对类的实例化过程的抽象化,又分为类创建模式和对象创建模式 类创建模式:工厂方法模式 对象-:简单工厂(静态工厂方法)模式.抽象工厂模式.单例模式.建造模式- 结构模式:描述如何将类或者对象结合在一起形成更大的结构 适配器模式.缺省模式.合成模式.装饰模式(包装模式).门面模式- 行为模式:对不同的对象之间划分责任和算法的抽象化 不变模式.策略模式.迭代子模式.命令模

Java基础小常识- 单例设计模式,-(9)

一.单例设计模式 1.定义:就是可以保证一个类在内存中的对象唯一性,单例设计模式有两种方式,一种饿汉式(实际开发中用),一种懒汉式(面试中用) 必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性. 2.如何保证对象唯一性 1)不允许其他程序用new创建该类对象 2)在该类创建一个对象实例 3)对外提供一个方法让其他程序可以过去该对象 3.实现步骤 1)私有化该类构造函数 2)通过new在本类中创建一个本类对象 3)定义一个公有的方法,将创建的对象返回 4.实例演示 //饿汉式,类

单例设计模式

一:单例设计模式的定义 单例设计模式,顾名思义,就是在整个程序运行过程中,只向外界提供一个对象,这样做可以避免资源的浪费,例如 我们打开回收站或者ppt时,只会启动一个窗口. 单例模式的java实现: 1:饿汉式 1 /** 2 * 3 */ 4 package com.hlcui.singleton; 5 6 /** 7 * @author Administrator 饿汉式单例类 8 */ 9 public class SingletonDemo { 10 // 1:内部创建一个对象 11

IOS开发之单例设计模式

本文将从四个方面对IOS开发中的单例设计模式进行讲解: 一.什么是单例设计模式 二.我们为什么要用单例设计模式 三.单例设计模式的基本用法 四.自定义单例设计模式代码的封装 一.什么是单例设计模式 所谓单例,即是单个的实例化对象,保证一个类有且仅有一个实例.通常情况下,当我们对一个类实例化时(如:alloc.new等),并不能保证每次实例化的对象是唯一的实例.那么为了保证该类可在多次实例化的过程中保证内存地址不变,就需要引入单例设计模式. 二.我们为什么要用单例设计模式 1.Singleton

OC中的单例设计模式及单例的宏抽取

1 // 在一个对象需要重复使用,并且很频繁时,可以对对象使用单例设计模式 2 // 单例的设计其实就是多alloc内部的allocWithZone下手,重写该方法 3 4 #pragma Person.h文件 5 6 #import <Foundation/Foundation.h> 7 @interface Person : NSObject <NSCopying,NSMutableCopying> 8 + (instancetype)sharePerson; // 给类提供一

设计模式总纲——单例设计模式

前两天写了设计模式总纲,今天就来讲讲我们在工程代码中最最最常用的设计模式了——单例设计模式,这个模式在工程代码上的出现率几乎为99.99999%,但是虽然很常用,但是用的好的人却不多,今天我们就来深入的说一说单例设计模式. 在学习一项新的知识之前,我们都要向自己提出三个问题,为什么要用这个知识,这个知识用在哪里,这个知识怎么用?既 why,where,how,3W模式,我们先来谈谈为什么需要单例设计模式,先来想想,如果一个工具类,比如一个读取配置文件的工具类,这类工具只是特定的功能类,既读取指定

OC学习-单例设计模式的理解、案例和简单总结

单例模式,就是一个类始终只有一个实例,不管如果copy还是retain还是alloc等等,都只有一个实例.为什么?有什么好处? 简单来说: a:有的东西只能有一个,那就必须用单例: b:单例的好处就是不会有多余的实例,所以节约内存: c:因为只有一个单例,所以易于管理多线程对它的访问. d:其他的原因……省略 我们创建一个单例的User类,然后生成一个user1对象,再把这个对象进行copy.retain这些,再看看它们是否是同一个实例,还是被创建出多个实例? (1)User.h view so

Java面向对象_单例设计模式

单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点 1.构造方法私有化 2.声明一个本类对象 3.给外部提供一个静态方法获取对象实例 两种实现方式:饿汉式和懒汉式 何种情况下使用呢?当一个类中没有属性(对象的状态):该类作为工具类使用非常频繁: 好处:节省内存(因为不断创建对象会消耗内存) 1 public class Practice14 { 2 3 public static void main(String[] args) { 4 // TODO Auto-generate