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个大牛总结出来的代码的一种思维方式、 今天先学习一样创建者模式的单列模式,...
  • baidu_33403616
  • baidu_33403616
  • 2016年08月28日 21:25
  • 276

C++学习日志第四篇

1.3 多态 定义:指属于不同类的对象对同一消息做出的不同的响应,具体表现是函数调用的“一种接口,多种方法”特性。从实现的角度可分为:编译时多态(常用且易学)和运行时多态(常用但不易学)。编译时多态...
  • irisalwayshere
  • irisalwayshere
  • 2016年03月30日 12:38
  • 219

《鸟哥的linux私房菜:基础学习篇》第3版 - 核心笔记(全)

一、什么是 Linux 呢?! • Unix 与 Linux 的历史     o Multics 系统:由 Bell(贝尔实验室)、MIT(麻省理工学院)与 GE(美国通     用电器)合作开发的...
  • sinat_36184075
  • sinat_36184075
  • 2017年05月19日 23:50
  • 616

Java 之JNI基础篇(一)

JNI,即Java Native Interface。它其实就是一套java与本地代码交互的接口或者说是一个协议。通俗的比喻,就是中国人讲中国话,日本人讲日本话,于是中国人碰到日本人,各说各话,无法交...
  • yingshukun
  • yingshukun
  • 2018年01月13日 18:51
  • 10010

学习编程道路上的书籍之Python篇

学习编程专栏连载编程学习编程道路上的入门书籍之Python篇,文章中的所有推荐的书籍均来自知乎社区大牛力荐书籍、豆瓣评分较高书籍、各语言社区比较热门书籍以及京东、亚马逊、当当热销书籍的重合书籍。...
  • Ly4wU5giY
  • Ly4wU5giY
  • 2016年10月29日 19:16
  • 52

Spark编程指南入门之Java篇六-RDD持久化介绍

10. RDD持久化 Spark其中一个重要的功能是持久化(或缓存)数据到内存。当持久化一个RDD时,每一个节点会把计算后的分区数据保存在内存里面,然后后续的操作可以直接重用内存里的数据。这样可以提...
  • gangchengzhong
  • gangchengzhong
  • 2017年01月12日 16:47
  • 996

GOF23设计模式之责任链模式(chain of responsibility)之实现

 /**  * 请假条  * 封装请假的信息。  */ package com.bjsxt.cn.chainOfResponsibility; public class Leave...
  • lk142500
  • lk142500
  • 2015年04月09日 15:47
  • 966

一步一步学ROP之linux_x86篇

0x00    本文仅解释说明蒸米大神一步一步学ROP之linux_x86篇,读者应先阅读这篇文章,遇到问题再来看我这篇文章。    阅读完这两篇文章后,我们会理解ROP(返回导向编程),DEP(堆栈...
  • jltxgcy
  • jltxgcy
  • 2016年02月19日 11:16
  • 2445

梁勇2011JAVA语言程序设计基础篇第16章编程题16.8

鼠标事件
  • vivi_and_qiao
  • vivi_and_qiao
  • 2016年12月07日 17:31
  • 480

Java语言程序设计基础篇第十版第一章编程练习题答案

Java语言程序设计基础篇第十版第一章编程练习题答案详解
  • Tanganling
  • Tanganling
  • 2016年10月20日 15:43
  • 2379
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java学习Gof23之创建者模式第2篇
举报原因:
原因补充:

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