ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

单例模式

2020-11-21 18:32:46  阅读:212  来源: 互联网

标签:Someone String 模式 Moon 实例 单例 public


转自:《Java 设计模式》2009年( 耿祥义 张跃平 著)

 

一,概括

单例模式:

    保证一个类仅有一个实例,并提供一个访问它的全局访问点。

 

二,引入

在某些情况下,我们可能需要某个类只能创建出一个对象,即不让用户用该类实例化出多于两个的实例。比如,苏轼说的 “但愿人长久,千里共婵娟”,或是张若虚说的 “海上升明月,天涯共此时”。无论我们身处何方,我们所能够看到的月亮都是同一轮的啊。在根据这两句诗创建的系统中,有人这个类,他们有名字和位置的属性,他们也可以实现赏月的动作,但是他们赏的是同一个月,那么设计者就需要保证只有一个月亮的实例,不能允许用户使用月亮的构造方法再创建出第2个实例。

 

三,代码与类图

上面引入的代码:

class Moon
{
	private static Moon m;
	private double radius;
	// 构造方法
	private Moon()
	{
		m = this;
		radius = 1738;
	}
	// 存取方法
	public static synchronized Moon getMoon()
	{
		if(m == null)
			m = new Moon();
		return m;
	}
	// 功能方法
	public String showMoon()
	{
		String s = "这是独一无二的月亮,它的半径是" + radius + " km.";
		return s;
	}
}
class Someone
{
	private String name;
	private String where;
	// 构造方法
	public Someone(String name,String where)
	{
		this.name = name;
		this.where = where;
	}
	// 功能方法
	public void seeMoon()
	{
		Moon m = Moon.getMoon();
		System.out.printf("有个叫" + this.name + "的人正在" + where + "赏月。" + m.showMoon() + "\n");
	}
}
public class M
{
	public static void main(String args[])
	{
		Someone SuShi = new Someone("苏轼","酒桌前");
		Someone ZhangJiuling = new Someone("张九龄","空房中");
		SuShi.seeMoon();
		ZhangJiuling.seeMoon();
	}
}

上面引入的类图:

(注: 由于找不到合适的箭头,这箭头就画的不标准了)

 

四,单例模式的结构

单例模式的结构十分简单,只包括一个角色:单例类(Singleton),单例类只可以创建出一个实例。

单例类在设计上的特点:

①:单例类中包含用自身声明的类属性,这个类属性是单例类唯一的实例。

②: 为了确保用自身声明的类属性只有一个实例,单例类将自身的构造方法的访问权限设置为 private .这样一来,任何其他类都无法使用单例类来创建对象。

③:为了让用户使用单例类的唯一实例,单例类必须提供访问该实例的方法,使得用户可以使用单例类的类名调用这个类方法访问这个唯一的实例。

 

五,单例模式的优缺点

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

 

 六,单例模式的使用场景

当系统需要某个类只能有一个实例。

 

 

=========== ========== ======= ====== ====== ===== ==== === == =

青玉案·元夕  宋代: 辛弃疾

东风夜放花千树,更吹落,星如雨。宝马雕车香满路。凤箫声动,玉壶光转,一夜鱼龙舞。
蛾儿雪柳黄金缕,笑语盈盈暗香去。众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。

 

标签:Someone,String,模式,Moon,实例,单例,public
来源: https://www.cnblogs.com/asdfknjhu/p/14014623.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有