一:设计模式
- java设计模式有23种
- 设计模式是一种思想,是解决问题行之有效的方式
二:单例设计模型
-
解决问题
-保证一个类中的对象的唯一性
-对于多个程序使用同一个配置信息对象时,就必须保证对象的唯一性 -
如何保证唯一性?
-不允许其他程序使用new创建该类对象
-在该类中创建一个本类实例
-对外提供一个方法可以让其他程序去获取该类对象 -
步骤
-私有化该类构造函数
-通过new在本类中创建一个本类对象
-定义一个公有方法,将创建对象返回
三:单例设计模式例题
/**
*author
*/
class Single{
private static Single s=new Single();
private Single(){}
public static Single getInstance(){
return s;
}
}
class SingleDemo{
public static void main(String [] args){
Single s1 =Single.getInstance();
Single s2 =Single.getInstance();
System.out.println(s1==s2);
//Single ss =Single.s;
Test t1=new Test();
Test t2=new Test();
t1.setNum(10);
t2.setNum(20);
System.out.println(t1.getNum());
System.out.println(t2.getNum());
}
}
class Test {
private int num;
public void setNum(int num){
this.num=num;
}
public int getNum(){
return num;
}
}
class Single{
private static Single s=new Single();
private Single(){}
public static Single getInstance(){
return s;
}
}
class SingleDemo2{
public static void main(String [] args){
Single s1 =Single.getInstance();
Single s2 =Single.getInstance();
System.out.println(s1==s2);
//Single ss =Single.s;
//Test t1=new Test();
//Test t2=new Test();
Test t1=Test.getInstance();
Test t2=Test.getInstance();
t1.setNum(10);
t2.setNum(20);
System.out.println(t1.getNum());
System.out.println(t2.getNum());
}
}
class Test {
private int num;
private static Test t=new Test();
private Test(){}
private static Test getInstance(){
return t;
}
public void setNum(int num){
this.num=num;
}
public int getNum(){
return num;
}
}
-
第一种代码输出值都会输出
-
第二种代码增加了下面代码,就会更新新的值覆盖前面的值
private static Test t=new Test();
private Test(){}
private static Test getInstance(){
return t;
}
四:饿汉式 与 懒汉式
-
饿汉式
class Single{
private static Single s=new Single();
private Single(){}
public static Single getInstance(){
return s;
}
} -
懒汉式
class Single2{
//类加载进来,没有对象,只调用getInstance方法时,才会创建对象
//延迟加载形式
private satatic Ssingle2 s=null;
private Single2(){
public static Single2 getInstance(){
if(s==null)
s=new Single2();
return s;
}
}
}