package com.btp.t2;
/*
* 设计模式:大量的实践中总结和理论化之后优选的代码结构,编程风格和解决问题的
* 思考方式
* 23种设计模式
*
* 单例的设计模式:
* 1.解决的方法:使得一个类只能够创建一个对象
* 2.具体步骤:①私有化构造器,使得在类的外部不能调用此构造器
* ②在类的内部创建一个类的实例
* ③私有化此对象,通过公共方法来调用
* ④此公共的方法,只能通过类来调,所以设置为static,同时类的实例instance
* 也必须是static的
*
*1.饿汉式:不管用不用,对象都创建了:private static Singleton instance=new Singleton();
*2.懒汉式:用对象的时候才创建,不用就不创建:private static Singleton1 instance=null;
* instance=new Singleton1();
*/
public class TestSingleton {
public static void main(String[] args) {
//饿汉式
/*Singleton s1=Singleton.getInstance();
Singleton s2=Singleton.getInstance();
System.out.println(s1 == s2);//true*/
//懒汉式
Singleton1 s3=Singleton1.getInstance();
Singleton1 s4=Singleton1.getInstance();
System.out.println(s3 == s4);//true,因为只有一个对象,所有引用指向同一片堆内存
}
}
//只能创建单个实例
//饿汉式:在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。
class Singleton
{
//1.私有化构造器,使得在类的外部不能调用此构造器
private Singleton()
{
}
//2.在类的内部创建一个类的实例
private static Singleton instance=new Singleton();
//3.私有化此对象,通过公共方法来调用
//4.此公共的方法,只能通过类来调,所以设置为static,同时类的实例instance也必须是static的
public static Singleton getInstance()
{
return instance;
}
}
//懒汉式:可能存在线程安全问题
class Singleton1
{
//1.私有化构造器
private Singleton1()
{
}
//2.声明私有对象
private static Singleton1 instance=null;
//3.创建调用本类私有对象的方法,调用这个方法的时候才真正创建对象
public static Singleton1 getInstance()
{
if(instance == null)
{
instance=new Singleton1();
}
return instance;
}
}