WUST 设计模式 实验一 单例模式的应用

实验一 单例模式的应用

实验目的

1、掌握单例模式(Singleton)的特点;
2、分析具体问题,使用单例模式进行设计。

实验内容和要求

        很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。
2.1
        通常客户端使用这个类是通过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图

2.2

运行截图

2.3

小结

        本次实验主要学习的是单例模式。在自己动手写代码的过程中才发现听懂和写出代码是两个概念,本以为自己都会了,一写起来还是慢吞吞的。或许这才是实验的意义吧,使我们对基本概念有一个更深层次的理解。在单利模式中更是用到了锁这个概念,又进一步拓展了我们的知识。运用软件画出UML图感觉比代码更加直观的体会一些细节的处理,例如:私有还是共有,返回值,属性等等。

posted @ 2019-04-10 22:37  wowpH  阅读(659)  评论(0编辑  收藏  举报