主页 > 开源代码  > 

设计模式单例模式

设计模式单例模式

单例模式就是在整个程序运行的过程中,这个类的实例化对象只有一个。

单例模式和private static 有密切的关系。

举一个例子:

一个wife,在法律允许的范围内,只能有一个。

public class Wife{ private static Wife wife= null; //定义一个wife放在那里,然后给这个wife名字 private Wife(){ //世俗和道德约束你,目的就是不让你产生第二个wife,也就是private修饰的构造方法 //一旦无参构造函数被重载了,那么系统默认的由系统创建的无参构造函数就会被覆盖 } public static Wife getInstance(){ if(wife == null){ //如果wife还没有定义,那就定一个 wife = new Wife(); //这个是private修饰的构造方法 } return wife ; } } //wife叫什么名字呀 public static void WifeInfo(){ System.out.println("我就是某某某...."); } }

static:

jvm在初始化时,就会加载static变量。

让对象在运行的时候不用实例化(new)就可以使用。

因为在jvm初始化时,已经实例化过了。

当前类永远都使用一个实例,否则所有调用的地方需使用New去获取实例,不够简洁。


private static : 私有常量。仅能作用于本类的静态代码块/静态成员方法中。 因为被static修饰的方法只能调用被static修饰的属性(static修饰的属性不仅仅能被static修饰的方法调用),所以如果一个私有属性会被静态方法调用的话,那么就需要将这个

public static Wife getInstance() 方法 只能用 private static Wife wife


/** * * husband是天天要面见wife,今天见的wife和昨天的,前天不一样那就出问题了! */ @SuppressWarnings("all") public class Husband{ /** * @param args */ public static void main(String[] args) { //第一天 Wife wife1=Wife .getInstance(); wife1.WifeInfo(); //第一天见的wife叫什么名字呢? //第二天 Wife wife2=Wife .getInstance(); wife2.WifeInfo(); //第三天 Wife wife3=Wife .getInstance(); wife3.WifeInfo(); //三天见的wife都是同一个人,荣幸吧! } }

但是存在线程不安全的情况,就在判断静态变量是否为空的那个时候,可能存在CPU的调度,导致同一时间有两个进程都运行到了这个判断条件,就会同时满足两个进程创建对象的要求,就存在两个对象,这不是单例模式的要求。

@SuppressWarnings("all") public class SingletonPattern { private static final SingletonPattern singletonPattern= new SingletonPattern(); //限制住不能直接产生一个实例 private SingletonPattern(){ } public synchronized static SingletonPattern getInstance(){ return singletonPattern; } }
标签:

设计模式单例模式由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“设计模式单例模式