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

}

}




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 {

		System.out.println("欢迎来到网站管理\n"

				+ "1.访问网站\n"

				+ "2.查看网站信息\n"

最后

按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。

学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。

道路是曲折的,前途是光明的!”

1.访问网站\n"

				+ "2.查看网站信息\n"

最后

按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。

学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。

道路是曲折的,前途是光明的!”

[外链图片转存中…(img-Uxx8em4v-1714137811088)]

[外链图片转存中…(img-Y80UKvQf-1714137811088)]

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值