Java_设计模式

  1 /*
  2 设计模式:解决问题的一种行之有效的思想。
  3 共23种设计模式
  4 
  5 其中一种:
  6 单例设计模式:
  7 解决:保证了一个类在内存中只能有一个对象。
  8 
  9 比如多程序访问同一个配置文件,希望多程序操作的都是同一个配置文件中的数据
 10 
 11 那么就需要保证该配置文件在对象的唯一性
 12 
 13 思路:
 14 1,怎么做才能保证这个对象是唯一的呢?
 15     1,其他程序随时用new创建该类对象,无法控制个数。
 16     结论:不让其他程序创建该类的对象。因为不可以控制。
 17     2,不让其他程序创建,该类在本类中自己创建一个对象。
 18     3,该类将创建的对象对外提供,让其他程序获取并使用。
 19 
 20 步骤:
 21     1,怎么实现不让其他程序创建该类对象呢?
 22         将该类中的构造函数私有化。
 23     2,在本类中创建一个本类对象
 24     3,定义一个方法,返回值类型是本类类型,让其他程序通过该方法就可以获取到该类对象。
 25 
 26 误区:使用set get方法使对象变得可控
 27 
 28 */
 29 //传说中的饿汉式开发用
 30 class Single
 31 {
 32     private static Single s= new Single();
 33     private static Single(){}
 34     public static Single getInstance()//定义方法是为了可控 
 35     {
 36         return s;
 37     }
 38 
 39 }
 40 //单例的延迟加载方式 懒汉式
 41 class Single2
 42 {
 43     private static Single2 s = null;
 44     private Single2(){}
 45     public static Single2 getInstance()
 46     {
 47         if (s==null)
 48         {
 49             s=new Single2();
 50         }
 51         return s;
 52     }
 53 }
 54 class SuperMan//超人要保证唯一性,私有化
 55 {
 56     private int age;
 57     private String name;
 58 
 59     private  static SuperMan man = new SuperMan("超人");
 60     private SuperMan(String name)
 61     {
 62         this.name=name
 63     }
 64     public void setAge(int age)
 65     {
 66         this.age=age;
 67     
 68     }
 69     public int getAge()
 70     {
 71         return age;
 72     }
 73     public String getName()
 74     {
 75         return this.name;
 76     }
 77     public static SuperMan getInstance()
 78     {
 79         return man;
 80     
 81     }
 82 
 83 }
 84 
 85 class  SingleDemo
 86 {
 87     public static void main(String[] args) 
 88     {
 89         /*
 90         Single s1 = new Single();
 91         Single s2 = new Single();
 92         System.out.println(s1==s2);//false
 93         */
 94 //创建不了对象        new Single().getInstancd();
 95 //        Single s1 = Single.getInstance();
 96 //        Single s2 = Single.getInstance();
 97 //        System.out.println(s1==s2);//true 通过方法获取对象s
 98         SuperMan s1 = SuperMan.getInstance();
 99         System.out.println(s1.getName);
100         System.out.println(s2.getAge);
101 
102 
103 
104     }
105 }

 

posted @ 2017-12-14 21:18  BirdieForLove  阅读(197)  评论(0编辑  收藏  举报