java----设计模式

 单例设计模式:

1、饿汉式

public class Demo {
    public static void main(String[] args){
    	Singleton1 singleton1 = Singleton1.getSingleton1();  //通过类调用接口
    	singleton1.print();
    }
}
class Singleton1{
	private Singleton1(){}; //将构造方法私有化,外部不能new对象
	private static Singleton1 singlenton1 = new Singleton1();  //使用静态存储方式,只存一个对象,当类被加载时,singleton1对象就被创建,一直放在内存中,直到程序结束;
	public static Singleton1 getSingleton1(){                  //将getSingleton1()方法设置为静态方法,让类可以调用,返回实例
		return singlenton1;
	}
	public void print(){
		System.out.println("测试");
	}
	
}

2、懒汉式(优先考虑)

public class Demo {
    public static void main(String[] args){
    	Singleton1 singleton1 = Singleton1.getSingleton1();  //通过类调用接口
    	singleton1.print();
    }
}
class Singleton1{
	private Singleton1(){}; //将构造方法私有化,外部不能new对象
	private static Singleton1 singleton1;  //声明一个静态的实例,只存一次
	public static Singleton1 getSingleton1(){
		if(singleton1==null){		
			singleton1 = new Singleton1(); //创建实例,在getSingleton()方法调用时创建,程序结束后释放,多线程存在问题
		}
		return singleton1;
	}
	public void print(){
		System.out.println("测试");
	}
}

补充:通过使用构造方法私有化,加静态方法代替单例,例如工具类中的Math

不需要创建对象,静态方法一直加载在内存中,直到程序退出

public class Demo {
    public static void main(String[] args){
    	Singleton1.fun1();       //直接通过类调用方法
    }
}
class Singleton1{
	private Singleton1(){}; //将构造方法私有化,外部不能new对象
	public static void fun1(){
		System.out.println("方法一");
	}
	public static void fun2(){
		System.out.println("方法二");
	}
	public static void fun3(){
		System.out.println("方法三");
	}
}

单例和使用静态方法代替单例对比

1、使用单例,当执行方法时,如果有定义的变量,方法进栈,执行完毕后,出栈,变量销毁,优点:省内存,缺点:需要反复的调用,耗时

2、静态方法代替单例:优点:调用的时间快,缺点:一直加载内存中,不能被销毁,比较占内存

猜你喜欢

转载自www.cnblogs.com/yanxiaoge/p/10661004.html