首页 > 代码库 > 设计模式之单例模式
设计模式之单例模式
单例
属于创建型设计模式,维护一个类只出一个对象,在生活中只有一个的对象,比如:地球、太阳、宇宙等。使用单例的情况也可以是:一个类的访问次数过高,但是不改变对象的信息,就可以把这个类设成单例。
单例的方式有两种:懒汉式和饿汉式。
单例的实现方法:
第一步:把构造器变私有
第二步:把本类对象作为本类的静态属性
第三步:利用静态方法获取本类的静态属性
代码如下:
懒汉式(凯哥升级版):
优点:节约内存,如果不用这个对象,不会造成内存浪费。
缺点:调用执行较慢。
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方法,意思是在本类中,可以访问私有变量。