首页 > 代码库 > 设计模式之单例模式

设计模式之单例模式

单例

属于创建型设计模式,维护一个类只出一个对象,在生活中只有一个的对象,比如:地球、太阳、宇宙等。使用单例的情况也可以是:一个类的访问次数过高,但是不改变对象的信息,就可以把这个类设成单例。

单例的方式有两种:懒汉式和饿汉式。

单例的实现方法:

第一步:把构造器变私有

第二步:把本类对象作为本类的静态属性

第三步:利用静态方法获取本类的静态属性

代码如下:

懒汉式(凯哥升级版):

优点:节约内存,如果不用这个对象,不会造成内存浪费。

缺点:调用执行较慢。

package com.cn.xfonlineclass2;

public class Dog {

       private String name;

       private int age;

       private  String sex;

       private static Dog dog=null;

       private Dog(String name,String sex,int age){

              this.name=name;

              this.age=age;

              this.sex=sex;

       }

       public static Dog getDog(){

              if(dog==null){

                     synchronized (Dog.class) {

                            if(dog==null){

                                   dog=new Dog("旺旺","雌",4);

                            }    

                     }                  

              }

              return dog;

      

       }

       public String toString(){

              return "名字是:"+name+"\t性别:"+sex+"\t年龄:"+age;

                    

              }

}

 

饿汉式:

优点:访问快、最快的将对象 new 出来。

缺点:如果不用对象,将占用内存,造成内存浪费。

package com.cn.xfonlineclass2;

public class Dog {

       private String name;

       private int age;

       private  String sex;

       private static Dog dog=new Dog("小黑","雄",3);

       private Dog(String name,String sex,int age){

              this.name=name;

              this.age=age;

              this.sex=sex;

       }

       public static Dog getDog(){

              return dog;

       }

       public String toString(){

              return "名字是:"+name+"\t性别:"+sex+"\t年龄:"+age;

                    

              }

 

}

 

测试类:

package com.cn.xfonlineclass2;

 

public class Test{

       public static void main(String[] args) {

             

                     System.out.println(Dog.getDog());

              }

}

 

注意:要把主方法从要测试的类中分离开来,若在要测试的类中创建main方法,意思是在本类中,可以访问私有变量。