Java设计模式之单件模式(四)

2024-09-01 01:38

本文主要是介绍Java设计模式之单件模式(四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

所有设计模式传送门

单件模式又叫单例模式,一种大家最熟悉也是比较好理解的设计模式。它保证一个类仅有一个实例,并提供一个访问它的全局访问点。

在某些情况下,我们可能需要某个类只能创建出一个对象,即不让用户用该类实例化出多余两个的实例。比如:在一个公文管理系统中,公文类的实例“公文文件”, 需要将公章类的实例作为自己的一个成员,以表明自己是一个有效的公文文件,那么系统
 的设计者就需要保证公章只有一个实例,不能允许使用公章类的构造方法再创建出第2个公章。单件模式是关于怎么样设计一个类,并使该类只有一个实例的成熟模式,该模式的关键是将 类的构造方法设置为private权限,并提供一个返回它的唯一实例的类方法(static方法)。
           包含一种角色:
                 单件类(Singleton):该类只可以创建出一个实例。  

优点:单件类的唯一实例由单件类本身控制,所以可以很好的控制用户何时访问它。  

适用情景:当系统需要某个类只能有一个实例。

以下是JAVA实现单例类的代码:

public class Singleton{private static Singleton uniqueInstance = new Singleton();  //JVM加载时创建private Singleton(){}        //构造方法时private权限public static Sinleton getInstance(){return uniqueInstance;}
}

若程序希望用户需要时在创建单件类的唯一实例,即用户调用单件类提供的类方法时在创建它,那么为了防止单线程在调用这个类方法时创建多个单件类的实例,可以将方法设置为同步方法。以下是JAVA实现单件类的代码:

public class Singleton{private static Singleton uniqueInstance;private Singleton(){}public static synchronieze Singleton getInstance(){if(uniqueInstance==null){uniqueInstance = new Singleton(); }return uniqueInstance;}
}

简单的例子:创建唯一的月亮

public class Moon {private static Moon uniqueMoon;double radius;double distanceToEarth;private Moon() {uniqueMoon = this;radius = 1738;distanceToEarth = 363300;}public static synchronized Moon getMoon() {if (uniqueMoon==null) {uniqueMoon = new Moon();}return uniqueMoon;}public String show(){String string = "月亮的半径是"+radius+"km,距地球是"+distanceToEarth+"km";return string;}
}public class Application {public static void main(String[] args) {MyFrame f1 = new MyFrame("张三看月亮");MyFrame f2 = new MyFrame("李四看月亮");f1.setBounds(10,10,360,150);f2.setBounds(370,10,360,150);f1.validate();f2.validate();}
}
class MyFrame extends JFrame{String string;public MyFrame(String title) {setTitle(title);Moon moon = Moon.getMoon();  //得到单件类的唯一实例string = moon.show();setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);setVisible(true);repaint();}public void paint(Graphics g) {super.paint(g);g.setFont(new Font("宋体", Font.BOLD, 14));g.drawString(string, 5, 100);}
}

  运行效果:

 

这篇关于Java设计模式之单件模式(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1125582

相关文章

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

SpringBoot整合Dubbo+ZK注册失败的坑及解决

《SpringBoot整合Dubbo+ZK注册失败的坑及解决》使用Dubbo框架时,需在公共pom添加依赖,启动类加@EnableDubbo,实现类用@DubboService替代@Service,配... 目录1.先看下公共的pom(maven创建的pom工程)2.启动类上加@EnableDubbo3.实

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命