package set;
public class Set
{
public static void main(String[] args)
{
// Gf gf = new Gf();就不能直接new了,只能通过静态方法调用
/*Gf gf = Gf.getGf();
Gf gf1 = Gf.getGf();
System.out.println(gf==gf1);
*/
BB bb = BB.back();
}
}
class Gf
{
private static String name;
/*
表演下饿汉式
为什么叫饿汉式呢?我觉得时因为,npy只有一个,但好多然就像饿汉一样
主要的效果如下,我只想我的的对象创建只有一个就可以用
流程如下
1先将构造器私有化
2在类的内部直接创建
*/
private static Gf gf = new Gf("my wife");
private Gf(String name)
{
this.name = name;
}
public static Gf getGf()
{
System.out.println(name);
return gf;
}
}
class BB
{
/*
这个时单例的懒汉
懒汉式就比较好理解了,就是不用我就不创建
做法
1构造器私有化
2定义一个静态变量或方法
3再来个公开静态方法来创建变量
*/
private static String name;
private static BB bb;//这里很关键,用这个bb判断有没有调用
private BB(String name)
{
System.out.println("edg");
this.name = name;//普通方法可以调所有
}
public static BB back()
{
if(bb == null)//只有这个能调用
{
return bb = new BB(name);
}
return bb;
}
}
学了挺多东西之后,来说说单例看了上面代码就应该知道了吧
但是他们也并非无懈可击,就比如说饿汉式,你如果没有调用但是对象就有了,这会造成资源的浪费,至于懒汉式的缺点就在与多线程时会出大问题,至于出什么问题作者也没学,反正还要做些操作懒汉式才不会出现问题。
还有一种抽象式,你只需把工作放在父类,加abstract,将必须的部分放在父类,将抽象反复给子类重写就好了。自己去细琐