单例模式--创建型

2024-05-07 19:08
文章标签 单例 创建 模式

本文主要是介绍单例模式--创建型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.什么是单例模式
单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。
在整个程序空间中,该类只存在一个实例对象。
二.为什么要使用单例模式
在应用系统开发中,
在多个线程之间,共享同一个资源或者操作同一个对象,
在整个程序空间使用全局变量,共享资源。
节省对象单创建时间。
因为在sigleton模式可以保证为一个类只生成一个唯一单实例对象,所以这些情况下单例模式可以派上用场。
在这里插入图片描述
代码实现一:
1.饿汉式

/*** 饿汉式*/
public class Person {//因为静态变量的常量,类加载的时候进行实例化,一份,不能改变引用private static final Person person=new Person();private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}//构造方法私有化private Person(){}//提供一个全局的静态方法//必须是静态的,如果不是静态的方法必须要对象才能被调用public static Person getperson(){return person;}
}public class TestMain {public static void main(String[] args) {Person person=Person.getperson();Person person1=Person.getperson();person.setName("张三");person1.setName("李四");System.out.println(person.getName());System.out.println(person1.getName());}
}
//李四

2.懒汉式

public class Person {private String name;//创建一个静态的对象的引用,static 是为了类加载的加载private static Person person;public String getName() {return name;}public void setName(String name) {this.name = name;}//构造方法私有化private Person(){}//判断这个静态的引用是否为空public static Person getPerson(){if(person==null){person=new Person2();}return person;}}
public class TestMain2 {public static void main(String[] args) {Person person=Person.getPerson();Person person1=Person.getPerson();person.setName("张三");person1.setName("李四");System.out.println(person.getName());System.out.println(person1.getName());}
}
//李四

饿汉式和懒汉式比较
饿汉式,在类加载的时候只有一份,
懒汉式,在单线程是可以保证,
在多线程饿汉式可以保证,懒汉式不可以保证。
多线程的时候可以用两种方式保证一份。
1.全局静态方法。同步方法
1.同步方法–锁

//判断这个静态的引用是否为空public static synchronized Person getPerson(){if(person==null){person=new Person();}return person;}

2.在内部方式加锁

    public static Person getPerson(){if(person==null){synchronized (Person.class){person=new Person();}}return person;}

这篇关于单例模式--创建型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968133

相关文章

git 创建新库(git init)-01

git init # 在当前目录新建一个git代码库,查看当前目录可以看到.git 文件夹git init [project_name] # 新建一个project_name目录,将其初始化为git 代码库git clone [url] # 下载一个项目和它的整个代码历史消息

java设计模式之工厂模式--普通工厂方法模式(Factory Method)

1.普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。 2.先定义一个接口: package com.zhong.pattern.factorymethod;/*** 发送接口* @author admin**/public interface Sender {/*** 发送消息方法* @param msg*/void send(String msg);} 3

Java设计模式之代理模式2-动态代理(jdk实现)

这篇是接着上一篇继续介绍java设计模式之代理模式。下面讲解的是jdk实现动态代理。 1.)首先我们要声明一个动态代理类,实现InvocationHandler接口 package com.zhong.pattern.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/*** 演

java设计模式之代理模式1--静态代理

Java编程的目标是实现现实不能完成的,优化现实能够完成的,是一种虚拟技术。生活中的方方面面都可以虚拟到代码中。代理模式所讲的就是现实生活中的这么一个概念:助手。 代理模式的定义:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。 1.)首先新建一个表演的接口 package com.zhong.pattern.proxy;/*** 表演接口* @author admin*

Java中23种设计模式之适配者模式

适配器模式的作用就是在原来的类上提供新功能。 主要可分为3种: 1.类适配:创建新类,继承源类,并实现新接口,例如:     class Adapter extends OldClass implements NewFunc{} 2.对象适配:创建新类持源类的实例,并实现新接口,例如:     class Adapter implements NewFunc { priva

使用ThreadPoolExecutor创建线程池有哪些关键参数

1、ThreadPoolExecutor类的全参数构造方法: /*** Creates a new {@code ThreadPoolExecutor} with the given initial* parameters.** @param corePoolSize the number of threads to keep in the pool, even* if they

java多线程—java线程的创建和线程的生命周期

<span style="font-size:14px;">package com.dufy.thread;/***1 线程学习* @author aflyun * */public class TestCreateThread {public static void main(String[] args) {testThread tt = new testThread();testRunab

maven学习系列——(三)maven项目的创建

这一篇大概会整理和总结到有如下知识点: (1):maven的使用入门一些命令 (2):用命令创建项目 (3):使用IDE集成工具创建项目–Eclipse和idea 3:使用Maven命令和Eclipse的Maven插件,创建Maven项目 (1)maven命令生成项目 新建一个文件目录,dos进入该目录并执行下面命令: mvn archetype:create -DgroupId=c

十九、原型模式—通过复制生产实例 #和设计模式一起旅行#

拔一根猴毛,变出十万个孙悟空 故事背景 在java中,我们一般创建实例的时候可以使用了new 关键词指定类名来生成类的实例。例如: Preson p = new Person();或者Person p = Person.getInstance(); 但是是在实际开发过程中,有时候会有“不指定类名的前提下生成实例”的需求。这种情况下,就不能通过上面的这种方式生成实例! 除了上面

STM32 TIM 编码器模式采集编码器信号

layout: post tags: [STM32] comments: true 文章目录 @[toc]什么是正交解码?编码器接口模式标准库接口TIM_TimeBaseInitTypeDefTIM_ICInitTypeDef 寄存器接口检测方法 标准库配置关于计数器溢出的情况 总结 什么是正交解码? 对于常用增量式编码器,光学编码器,采用带槽圆盘,一侧是发射光线的发射端,而光电