Java学习Gof23之创建者模式第2篇

原创 2016年08月29日 22:47:39

昨天学习了一下饿汉,和懒汉这俩个模式大致的代码是看懂了,不过里面的思想还是有点疑惑的,什么时候使用哪一个,我还是有点蒙蔽的。

先复习一下吧,饿汉就是类初始化的时候就立刻加载的,private static SingleDemo instance=new SingleDemo(); 然后构造器私有化,接着用一个静态方法返回这个对象。

懒汉就是比较懒啦,一开始对象不会初始化的,就是默认为null的,只有当你调用下面的返回实例的方法的时候它首先会判断这个对象是否为空,空的话就会new 一个这样的对象‘

不然的话直接返回这个对象。返回的方法前面肯定要加一个synchronized 因为不加同步的话就会造成多个多个对象的创建,这个肯定是一个延迟加载和线程安全的啦!

饿汉和懒汉的区别就是是否延迟加载吧,还有一个就是调用效率的问题,懒汉的话是加了同步的调用效率肯低啦,饿汉反之就高啦!

好了接下来学习一下剩下的三个模式吧

首先是那个双重检测锁这个据说用的时候有问题,就稍微提一下吧,它就是将同步写在方法的内部。就是这样调用效率就高啦,有缺点的东西就不需要深入了解了。

让我们来看一下静态内部内的方式吧上代码:

public class singleDemo{  
//静态的私有内部类的创建  
private static class  GetSingleDemo{  
public static final  singleDemo instance=new singleDemo();
}  

//构造器私有化  
private singleDemo(){  
}  

//获取实例  
public static SingleDemo getInstance(){  
return Get singleDemo.instance;  
}  
}  



一开始静态内部内少加了一个static ,静态静态啦,不能少了static的啦!还有一个方法是静态的话这个内部内也必须是静态的,成员我就不清楚了。

发现一个规律,无论是饿汉,懒汉,还是静态内部类,前面的俩个属性都是私有的,只有最后一个方法的访问时public .其实java很多内部代码都是不能直接创建对象的,可能他的内部就是很多内部类,饿汉,懒汉的方式,来实现对象的创建的,java核心技术上面有很多的,我记得有一个clone的,忘了,得去翻翻书了,记性不好,看过的东西一会就忘了。

这个内部类实现的方式的就是中和了饿汉,懒汉的有时,延迟加载,线程安全,调用效率高,lazy load.

最后谈谈那个枚举代码很简洁直接写了

public enum singleDemo{

instance;//本身就是一个单列就是这么简单 。直接调用

public  void operate(){

//具体操作

}

}

就是这么多,枚举的优势就是天然的,无污染的,是jvm底层提供保障的,人家可是有后台的,据说还有可以防止反射和反序列化的漏洞,都知道反射可以调用私有的构造器的,序列化这方面我还不怎么了解,以后再看吧。

缺点就是无延迟加载,天然的当然啦!


今天就写这么多了,晚安!

版权声明:本文为博主原创文章,未经博主允许不得转载。

java设计模式GOF23之创建者模式

设计模式就是一种思维,一种思考方式。 编程的语言只是工具,思维才是王道。 GOf :group of  four  是国外的4个大牛总结出来的代码的一种思维方式、 今天先学习一样创建者模式的单列模式,...

小伙的java之旅——GOF23-单例模式

单例模式:核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。 饿汉式:/** * 单利模式:饿汉式加载 * 饿汉单例模式代码中,static变量会在类...

【GOF23设计模式】_责任链模式_公文审批_供应链系统的采购审批_异常链_过滤器和拦截器调用过程JAVA243

来源:http://www.bjsxt.com/ 一、S03E243_01【GOF23设计模式】_责任链模式、公文审批、供应链系统的采购审批、异常链、过滤器和拦截器调用过程package com.t...

【GOF23设计模式】_原型模式JAVA233-234

一、S03E233_01【GOF23设计模式】_原型模式、prototype、浅复制、深复制、Cloneable接口二、S03E234_01【GOF23设计模式】_原型模式、反序列化实现深复制、效率对...

233_尚学堂_高淇_java300集最全视频教程_【GOF23设计模式】_原型模式_prototype_浅复制_深复制_反序列化实现深复制

原型模式分为深复制和浅复制 浅复制:只是拷贝对象本身,不拷贝对象的属性,所以”浅“。复制后的对象自然在内存中位于不同的地址中,因为本质上是两个对象,所以内存中的地址自然不同。但是复制之后的对象的属性...

【GOF23设计模式】_适配器模式、对象适配器、类适配器、开发中场景JAVA235

一、S03E235_01【GOF23设计模式】_适配器模式、对象适配器、类适配器、开发中场景...

GOF23设计模式之观察者模式的理解与实现2(使用java自带的观察者类和接口)

观察者模式的理解与实现,使用JDK自带的Observer类和Observable接口

【GOF23设计模式】_备忘录模式_多点备忘_事务操作_回滚数据底层架构JAVA253

来源:http://www.bjsxt.com/ 一、S03E253_01【GOF23设计模式】_备忘录模式、多点备忘、事务操作、回滚数据底层架构package com.test.memento; ...

【GOF23设计模式】_建造者模式详解_类图关系JAVA232

一、S03E232_01【GOF23设计模式】建造者模式详解类图关系建造飞船

【GOF23设计模式】_代理模式_静态代理_动态代理_开发场景JAVA236-237

【GOF23设计模式】_代理模式_静态代理_动态代理_开发场景JAVA236-237
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java学习Gof23之创建者模式第2篇
举报原因:
原因补充:

(最多只允许输入30个字)