05-单例模式Quarkus实现

摘要:本文用一个实例场景描述Gof 23设计模式中的单例模式,并用Quarkus框架代码给予实现,同时也给出实现代码的UML模型。
关键字:Gof 23 设计模式 单例模式 Quarkus

1 基础知识
1.1 标准定义
单例模式标准定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
1.2 分析和说明
单例模式属于创建型模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且其它类可以通过某种方法访问该实例。单例模式只应在有真正的“单一实例”的需求时才可使用。Singleton结构如图1所示。单例模式只有一个角色,就是要进行单例的类。 在这里插入图片描述
图1单例模式结构

2 应用场景举例
比如公司规定,一个市场用户只能由一个市场人员跟踪。最初用户联系公司的时候,任命一个市场人员负责这个用户。以后这个用户再继续联系公司,全部统一由指定的这个市场人员来负责。用例见图2。 在这里插入图片描述
图2 单例模式的用例图
在这里可以把SaleMan就是一个要求单例的类,ServiceManager是一个提供单例方法的类。其实现类图见图3。 在这里插入图片描述
图3 单例模式的类图
单例模式实现的顺序图如图4所示,实现顺序描述:① 创建一个销售员实例对象;② 创建一个服务实例对象;③ 最初向服务对象要求服务;④ 返回销售员实例对象。⑤ 多次向服务对象提出服务,返回同一个销售员实例对象; 在这里插入图片描述
图4 单例模式实现顺序图

3.Quarkus的实现程序代码
Quarkus程序实现主要包括ServiceManager类文件和SaleMan类文件。其关系如图3所示。下面分别列出这2个文件的程序代码,最后列出测试代码并显示输出结果。
ServiceManager类文件程序代码清单01所示。
程序代码清单01

@ApplicationScoped
public class ServiceManager {
	private SaleMan saleMan = null;
	public ServiceManager(SaleMan saleman) {
		this.saleMan = saleman;
	}

	public SaleMan getSaleManService() {
		if (saleMan != null)
			return saleMan;
		return saleMan;
	}
}

SaleMan类文件程序代码清单02所示。
程序代码清单02

@ApplicationScoped
public class SaleMan {
	private String name;
	private String service ;
	
	public SaleMan(){	}
	
	public SaleMan(String name,String service){
		this.name = name;
		this.service = service;
	}
	
	public String getName() {return name;	}

	public void setName(String name) {this.name = name;	}

	public String getService() {
		return service;
	}
	public void setService(String service) {
		this.service = service;
	}
}

单例模式测试程序的代码清单03如下:
程序代码清单03

public class SingletonClient implements QuarkusApplication {

	@ConfigProperty(name = "gof23.creationalpattern.singleton.title", defaultValue = "gof23")
	String title;
	
	@Inject
	SaleMan saleMan ;
	
	@Inject
	ServiceManager service ;		
	
	@Override
	public int run(String... args) {
		
		saleMan.setName("小刘");
		saleMan.setService("小刘的服务");		
		System.out.print("第一次获得服务:");

		SaleMan saleman = service.getSaleManService();
		System.out.println(saleman.getService());

		System.out.print("第二次获得服务:");
		saleman = service.getSaleManService();
		System.out.println(saleman.getService());

		System.out.print("第三次获得服务:");
		saleman = service.getSaleManService();
		System.out.println(saleman.getService());
		return 0;
	}

	public static void main(String... args) {
		Quarkus.run(SingletonClient.class, args);
	}
}

单例模式测试类输出结果如下所示:

第一次获得服务:小刘的服务
第二次获得服务:小刘的服务
第三次获得服务:小刘的服务

4. 相关Quarkus程序源码下载
可以直接从github上获取代码,读者可以从github上clone预先准备好的示例代码。

git clone https://github.com/rengang66/quarkus-sample-gof23.git

这是一个Maven项目,然后Maven导入工程。该程序位于“src\main\java\com\iiit\quarkus\sample\gof23\creationalpattern\singleton”目录中。
同时也可以从gitee上clone预先准备好的示例代码,命令如下:

git clone https://gitee.com/rengang66/quarkus-sample-gof23.git

5 扩展和说明
单例模式也是应用非常广泛的设计模式。单例模式有两种实现方式,一种叫懒汉式单例模式,另一中叫饿汉式单例模式。

参考文献

[1] E.Gamma, R.Helm, R.Johnson, and Vlissides. Design Patterns Elements of Reusable Object Oriented Software. Addison-Wesley, 1995
[2] E.Gamma, R.Helm, R.Johnson, and Vlissides.著,李英军等译,设计模式:可复用面向对象软件的基础,北京:机械工业出版社.2000.9.
[3] 阎宏,Java与模式,北京:电子工业出版社. 2002.10
[4] 王俊峰 戚晓滨. 设计模式和UML. 计算机应用研究,1999.16(5), 27-29,39.
[5] 陈琴 朱正强. UML在设计模式描述中的应用. 计算机工程与设计,2003.24(4), 81-84.
[6] 龚永生. ACE与GoF设计模式——ACE_Singleton设计模式解析. 开放系统世界,2002.(10), 76-82.
[7] 王爽 赵会洋. Java中单态设计模式的教学过程设计. 计算机教育,2008.(14), 60-61,65.
[8] 板桥里人. Jive和设计模式. 程序员,2003.(6), 58-60.
[9] 龚崇栋. 基于单件设计模式的数据库连接组件的设计. 甘肃科技,2007.23(11), 58-60.
[10] 龚赤兵. 单例模式与JDBC编程. 中文信息:程序春秋,2003.(11), 77-79.
[11] 银文杰 彭龑 蹇勇. 基于单例模式的优化图型决策模型构造. 四川理工学院学报:自然科学版,2005.18(2), 4-6.
[12] 柯菁. 浅谈单例设计模式在数据库领域的应用. 福建电脑,2007.(10), 164-164,184.
[13] 张良平 曾贤龙 王倩. 利用设计模式实现数据访问的泛化. 电脑编程技巧与维护,2008.(10), 33-38.
[14] 郑毅琳 王顶. Singleton模式在VB中的实现和应用. 河北工业科技,2005.22(6), 334-336,339.
[15] 李长春 廖建新 王纯 朱晓民. 软件界面国际化及设计模式的应用. 北京工商大学学报:自然科学版,2007.25(5), 53-56.
[16] 唐露萍 陈洁. 设计模式在短波通信软件中的应用. 计算机工程,2008.34(D09), 148-150.
[17] 杨洲 王自强 周余 都思丹. 设计模式在数据采集系统中的应用. 微电子学与计算机,2008.25(2), 107-110…
[18] 吴超. 设计模式在数据库浏览系统中的应用. 计算机工程与科学,2006.(z2), 148-149.
[19] 刘蕴珊 刘列励. 设计模式在信息系统中的应用研究. 信息技术,2008.32(10), 121-123,126.
[20] 何剑峰 雷金辉 高润琴. 设计模式在真空炉控制系统中的应用. 工业控制计算机,2008.21(3), 42-42,45.
[21] Quarkus官网. https://quarkus.io/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值