实验目的
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图感觉比代码更加直观的体会一些细节的处理,例如:私有还是共有,返回值,属性等等。