WUST 设计模式 实验一 单例模式的应用
实验一 单例模式的应用
实验目的
1、掌握单例模式(Singleton)的特点;
2、分析具体问题,使用单例模式进行设计。
实验内容和要求
很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。
通常客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置文件内容的对象。如果在系统运行中,有很多地方都需要使用配置文件 的内容,系统中会同时存在多份配置文件的内容,这会严重浪费内存资源。
事实上,对于AppConfig类,在运行期间,只需要一个对象实例就够了。那么应该怎么实现呢?用C#控制台应用程序实现该单例模式。绘制该模式的UML图。
实验环境
编译环境:Eclipse
UML图: StarUML
源程序
/**
* @Author wowpH
* @Date 2019年4月4日 下午1:35:45
*/
public class Appconfig {
// 一个自己的实例
private static Appconfig config;
// 一个language(语言)的参数
private String language;
// 锁对象
private static Object lock = new Object();
private Appconfig() {
setLanguage("English");
}
/**
* @return Appconfig实例
*/
public static Appconfig getAppconfig() {
if(null == config) {
synchronized(lock) {
if(null == config) {
config = new Appconfig();
}
}
}
return config;
}
/**
* @return the language
*/
public String getLanguage() {
return language;
}
/**
* @param language the language to set
*/
public void setLanguage(String language) {
this.language = language;
}
}
/**
* @Author wowpH
* @Date 2019年4月4日 下午1:35:15
*/
public class Client {
private Appconfig configOne, configTwo;
public Client() {
configOne = Appconfig.getAppconfig();
configTwo = Appconfig.getAppconfig();
System.out.println(configOne.getLanguage());
System.out.println(configTwo.getLanguage());
configOne.setLanguage("中文");
System.out.println(configOne.getLanguage());
System.out.println(configTwo.getLanguage());
}
/**
* @param args
*/
public static void main(String[] args) {
new Client();
}
}
UML图
运行截图
小结
本次实验主要学习的是单例模式。在自己动手写代码的过程中才发现听懂和写出代码是两个概念,本以为自己都会了,一写起来还是慢吞吞的。或许这才是实验的意义吧,使我们对基本概念有一个更深层次的理解。在单利模式中更是用到了锁这个概念,又进一步拓展了我们的知识。运用软件画出UML图感觉比代码更加直观的体会一些细节的处理,例如:私有还是共有,返回值,属性等等。