看视频的时候,单例设计模式老师讲了一下实现方法,关于它应用的例子老师一句话提到过,说是需要不同的对象需要访问和修改配置信息,而配置信息有些时候不能直接通过.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;
- }
-
- }
复制代码 |
|