黑马程序员技术交流社区
标题:
关于单例设计模式,分享一个例子
[打印本页]
作者:
mtdanz
时间:
2014-9-27 19:03
标题:
关于单例设计模式,分享一个例子
看视频的时候,单例设计模式老师讲了一下实现方法,关于它应用的例子老师一句话提到过,说是需要不同的对象需要访问和修改配置信息,而配置信息有些时候不能直接通过.XXX这种方式获取,有时候可能涉及一些权限方面的控制,于是我把老师的例子加了一些内容,设计成一个用密码获得权限的小例子,可以帮助理解单例设计模式的用法。
package Day08;
//单例设计模式:可以保证一个类在内存中的对象唯一性。
//就是一个类只能有一个对象,比如A、B两个程序都要访问一个配置文件,但是
//由于配置文件内容太多,不合适全部作为静态类而占有太多资源,这就需要使用单例设计模式
//实现方法:
//1.不允许new该类对象,私有化构造函数。
//2.在该类中创建本类实例并私有。
//3.对外提供一个静态方法,让外界可以获取该本类对象。
//(本来可以直接获取本类实例,但是通过方法来获取实例比较可控,比如方法需要密码作为参数来判断能否获取)
class e02
{
public static void main(String[] args)
{
Config Config副本1=Config.getInstance(900811);
Config Config副本2=Config.getInstance(900811);
Config副本1.setText("XXX改过的信息");
Config副本2.setText("YYY改过的信息");
System.out.println(Config副本1.getText());
System.out.println(Config副本2.getText());
Config2 Config2副本1=Config2.getInstance(123356);
}
}
class Config //饿汉式
{
private static int code=900811;
private String text="原本的信息";
private Config(){};//私有化构造函数
private static Config s=new Config();//创建私有的本类对象
public static Config getInstance(int a)
{
if(a==code)
{
System.out.println("密码正确,可以修改配置文件");
return s;
}
else
{
System.out.println("密码错误,无法修改配置文件");
return null;
}
}
public void setText(String a)
{
this.text=a;
}
public String getText()
{
return this.text;
}
}
class Config2//懒汉式 、延迟加载形式,在多线程时有可能出问题
{
private static Config2 s=null;
private int code=123456;
public static Config2 getInstance(int x)
{
if(x==123456)
{
if(s==null)
s=new Config2();
System.out.println("密码正确,可以修改配置信息");
return s;
}
else
System.out.println("密码错误,无法修改配置信息");
return null;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2