java---单例模式

 
  设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结
  实用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码的可靠性
  常用的设计模式:23种,我们要学:单例、模板、装饰、适配器、工厂、代理等
  单例设计模式:一个类只允许有一个对象,将这个对象作为一个全局的访问点提供出去供大家使用。
  分析:
  1.用户只能有一个对象
  2.全局的访问点:得到的对象就是全局的访问点,如何做到全局?让static去修饰
  3.如何提供出去?
  4.供大家使用?---单例的功能
 



//创建单例类
//饿汉式-在定义变量的同时完成初始化
class Singleton{
	//2.在类的内部创建一个当前类型的属性并赋值--在类的内部得到了当前类的一个对象
	//将变量私有化,让外界无法直接访问   给变量用static修饰 让他成为全局的访问点
	private static Singleton singleInstance = new Singleton();
	//1.将构造方法私有化
	private Singleton(){
		
	}
	
	//3.使用公共的方法将变量提供出去,并将方法设置成静态的,可以通过类名直接调用
	public static Singleton getSingleton(){
		return singleInstance;
	}
}
//懒汉式-开始只是定义变量,什么时候使用什么时候赋值
class Singleton1{
	//2.在类的内部创建一个当前类型的属性并赋值--在类的内部得到了当前类的一个对象
	//将变量私有化,让外界无法直接访问   给变量用static修饰 让他成为全局的访问点
	private static Singleton1 singleton = null;
	//1.将构造方法私有化
	private Singleton1(){
		
	}
	
	//3.使用公共的方法将变量提供出去,并将方法设置成静态的,可以通过类名直接调用
	public static Singleton1 getSingleton(){
		if (singleton == null) {		
			singleton = new Singleton1();//保证只创建一个对象
		}
		return singleton;
	}
	
	//单例的功能区
	int num;
	
}
public class Demo5 {
	public static void main(String[] args) {
		Singleton singleton = Singleton.getSingleton();
		Singleton singleton2 = Singleton.getSingleton();
		System.out.println(singleton == singleton2);
		
		//实例:完成的功能:将A类中num1的值传给B类对象的num2
		A a = new A();
		a.num1 = 4;
		
		B b = new B();
		
		//直接赋值,一般类的成员变量是私有的,所以不推荐
		b.num2 = a.num1;	
		//通过传参间接赋值
		b.test(a);
		
		//通过单例实现传值
		a.test1();
		b.test2();
	}
}
//测试单例的功能
class A{
	int num1;
	public void test1(){
		Singleton1 singleton = Singleton1.getSingleton();
		singleton.num = num1;
	}
	
}
class B{
	int num2;
	//通过传参赋值
	public void test(A a){
		num2 = a.num1;
	}
	//通过单例传值
	public void test2(){
		Singleton1 singleton = Singleton1.getSingleton();
		num2 = singleton.num;
	}
	
}