/*
设计模式:解决某一类问题最行之有效的方法
Java中23种设计模式:
单例设计模式:解决一个类在内存中值存在一个对象
想要保证对象唯一
1、为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象
2、为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
3、为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
这三步怎么用代码体现呢?
1、将构造函数私有化
2、在类中创键一个本类对象
3、给创建的对象提供一个访问该对象的方式
对于事物该怎么描述还怎么描述,当需要将该事物的对象保证在内存中唯一时,将以上的三步加上即可。
*/
class Single
{
private int num;
public void setNum (int num)
{
this.num = num;
}
public int getNum()
{
return num;
}
private Single(){}
private static Single s = new Single();
//因为s变量不需要外部直接访问,所以私有化,因为下面的静态函数需要调用该对象,所以也将其静态。
public static Single getInstance()
//因为不能创建对象,需要使用类名访问,所以使用静态函数。
{
return s;
}
}
class SingleDemo
{
public static void main(String[] args)
{
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
s1.setNum(32);
System.out.println(s2.getNum());
//s2的值和s1的值相同证明调用的是同一个对象。
}
}
/*
class Single
{
private static Single s=new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
饿汉式:
对象先初始化。
*/
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if (s==null)
{
s= new Single();
return s;
}
}
//懒汉式,对象被调用时才初始化。也叫做延时加载。
}
//定义单类时使用饿汉式
class 单例模式
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
class Single
{
private static Single s = null;
private Single(){}
public static synchronized Single getInstance()
{
if (s==null)
{
-->A
s= new Single();
return s;
}
}
}//加入synchronized后会造成程序低效,因为当B遇到synchronized就不会进入。