Java设计模式之单例设计模式

/*定义私有类型的人类对象用于返回当前实例*/

private static Person person = null;





/**

 * 私有化构造方法,限制其在类外部肆意实例化对象

 */

private

本文已被开源项目:【一线大厂面试真题解析+核心总结学习笔记+最新全套讲解视频+实战项目源码讲义】收录

Person() {

}





/**

 * 实例化人类方法,返回实例化对象

 * @return Person

 */

public static Person getInstance() {

	if (person == null) {

		person = new Person();

	}

	return person;

}



public String getName() {

	return name;

}



public void setName(String name) {

	this.name = name;

}

}




Test测试类:



public class TestPerson {

public static void main(String[] args) {

	Person person = Person.getInstance();

	person.setName("张三");

	Person person2 = Person.getInstance();

	person2.setName("李四");

	

	System.out.println("第一个人类对象姓名:" + person.getName()

			+ ",第二个人类对象姓名:" + person.getName());

}

}




输出结果为:  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210523184704961.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70#pic_center)  

因为限制了类**只能实例化一个对象**,**一开始实例化完成后,再次调用实例化方法只会返回之前的示例,所以说无论实例化多少对象,实例方法只会返回第一次实例化时的对象。**



再来看一个练习题,巩固以下设计模式,复习之前的集合Map  

题目如下:  

单例模式创建网站计数器类  

1 定义网站计数器类(SiteCounter)  

1.1 成员变量: 网站名称(siteName) 每个访客访问次数(Map<String,Integer> visitorViewMap) 访问总次数(Integer visitViewCount)  

1.2 单例化该类  

1.3 成员方法: void doview(String visitorName)  

1.3.1 执行该方法后,需要增加一次 总访问次数  

1.3.2 如果该访客第一次访问,则在 visitorViewMap 中记录该访客访问1次。  

1.3.3 如果该访客不是第一次访问,则在visitorViewMap 中增加该访客的访问次数。  

1.4 成员方法: String show()  

1.4.1 返回类的所有信息  

格式如下:  

网站名称: XXXXXX  

访问总次数: XX次  

访客清单:  

XXX: XX次  

XXX: XX次  

1.5 定义测试类 SiteCounterTest 测试。  

类图如下:  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210523185857280.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70#pic_center)  

具体代码为下:  

SiteCounter类:



import java.util.HashMap;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Set;

public class SiteCounter {

//网站名称

private String siteName;

//访问人名称与访问次数

private Map<String, Integer> vistorViewMap = new HashMap<String, Integer>();

//访问总数

private Integer visitViewCount = 0;



private static SiteCounter site = null;



/**

 * 私有化构造方法,防止在类外部肆意实例化对象

 */

private SiteCounter() {

	

}



/**

 * 实例化对象

 * @return

 */

public static SiteCounter getInstance() {

	if (site == null) {

		site = new SiteCounter();

	}

	return site;

}



/**

 * 计算网站总访问次数,及访问人

 * @param vistorName

 */

public void doview(String vistorName) {

	this.setVisitViewCount(this.getVisitViewCount()+1);

	if (vistorViewMap.containsKey(vistorName)) {

		vistorViewMap.put(vistorName, vistorViewMap.get(vistorName)+1);

	} else {

		vistorViewMap.put(vistorName, 1);

	}

}



/**

 * 输出网站详细信息

 */

public String show() {

	String str = "网站名称:" + this.getSiteName()+ "\n访问总次数:"

			+ this.getVisitViewCount() + "\n访问清单:\n";

	String str2 = "";

	Set<Entry<String, Integer>> set = vistorViewMap.entrySet();

	for (Entry<String, Integer> entry : set) {

		str2 += entry.getKey() + ":" + entry.getValue() + "\n";

	}

	return str + str2;

}



public String getSiteName() {

	return siteName;

}



public void setSiteName(String siteName) {

	this.siteName = siteName;

}



public Map<String, Integer> getVistorViewMap() {

	return vistorViewMap;

}



public void setVistorViewMap(Map<String, Integer> vistorViewMap) {

	this.vistorViewMap = vistorViewMap;

}



public Integer getVisitViewCount() {

	return visitViewCount;

}



public void setVisitViewCount(Integer visitViewCount) {

	this.visitViewCount = visitViewCount;

}

}




SiteCounterTest类:



import java.util.Scanner;

public class SiteCounterTest {

public static void main(String[] args) {

	SiteCounter site = SiteCounter.getInstance();

	site.setSiteName("www.taobao.com");

	Scanner sca = new Scanner(System.in);

	do {

最后

看完上述知识点如果你深感Java基础不够扎实,或者刷题刷的不够、知识不全面

小编专门为你量身定制了一套<Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法>

image

针对知识面不够,也莫慌!还有一整套的<Java核心进阶手册>,可以瞬间查漏补缺

image

全都是一丢一丢的收集整理纯手打出来的

更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~

image

image

:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法>

[外链图片转存中…(img-BzYXQPho-1723375234143)]

针对知识面不够,也莫慌!还有一整套的<Java核心进阶手册>,可以瞬间查漏补缺

[外链图片转存中…(img-4FWoCfst-1723375234144)]

全都是一丢一丢的收集整理纯手打出来的

更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~

[外链图片转存中…(img-0xXd8n5t-1723375234145)]

[外链图片转存中…(img-JfY5mHed-1723375234145)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值