啥叫设计模式:就是人们总结出来的为了方便于以后遇到相同问题时更轻易的解决的方法
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();
public static Single getInstance()
{
return s;
}
}
class SingleDemo
{
public static void main(String []args)
{
Single ss=Single.getInstance();
}
}
以上是属于先初始化对象,即饿汉式
还有另外一种写法,即Single类进内存时,对象还不存在,只有对象被调用时,才初始化,也叫做对象的延迟加载,即懒汉式
写法如下:
class Single
{
private static Single s=null;
private Single();
public static Single getInstance()
{
if(s==null)
s=new Single();
return s;
}
}