package test02;
public class Demo8_DanLiMoShi {
public static void main(String[] args) {
//单例(Singleton)设计模式
//用于解决什么问题
//用于保证一个类的对象的唯一性
//多个程序都要使用一个配置文件中的数据。而且要实现数据共享和交换
//必须要将多个数据封装到一个对象中。而且多个程序操作的是同一个对象,那就必须保证这个配置文件对象的唯一性
//怎么保证对象的唯一性
//1.私有化构造函数,不让其他程序创建的对象初始化
//2.在本类中创建一个本类对象
//3.定义一个功能,其他程序可以通过这个功能获取到奔雷的对象
//如何调用getInstance
//要想获取Single对象调用getInstance方法。既然无法通过对象调用只能用类名调用。所以getInstance为static类型
//方法1
// Single ss =Single.getInstance();
// Single ss2 =Single.getInstance();
//方法2
//这种方式可以实现,加入访问获取是为了对象可控
// Single ss =single.s;
// Single ss2 =single.s;
Superman man1 = Superman.getInstance();
Superman man2 = Superman.getInstance();
man1.setname(“啊。。。。啊啊啊啊啊”);
man2.fly();
}
}
//饿汉式
class Single
{
//创建一个本类对象
static Single s = new Single();
//一开始就加载
//私有化构造函数
private Single()
{
}
//定义一个方法返回这个对象
static Single getInstance()
{
return s;
}
}
//懒汉式
//单例的延迟加载方式
class Single2
{
private static Single2 s2 = null ;
private Single2(){}
public static Single2 getInstance()
{
if(s2==null)
s2 = new Single2();//需要时才加载private static Single2 s2 = null ;
return s2;
}
}
//实例:描述超人
class Superman
{
private String name;
private static Superman man = new Superman(“可乐克”);//创建单例对象,用getInstance实例化
//就不用在主函数中创建对象了
public Superman(String name)
{//初始化
// TODO Auto-generated constructor stub
this.name = name ;
}
public static Superman getInstance()
{
return man;
}
public void setname(String name)
{
this.name = name ;
}
public String getName()
{
return this.name;
}
public void fly()
{
System.out.println(this.name+”…fly”);
}
}