文档章节

java设计模式-- 单例模式

爱学习的逃课君
 爱学习的逃课君
发布于 2014/11/27 14:20
字数 736
阅读 93
收藏 3

在很久之前,也就是在大二暑假的时候,那时候看马士兵的视频教程中有提到很多的设计模式。

java的设计模式大致可以分为3大类,23种设计模式。

其中,创建型模式有5种:单例模式、建造者模式、原型模式、工厂模式、抽象工厂模式。

结构型模式有7种:设配器模式、装饰器模式、代理模式、外观模式、享元模式、组合模式、桥接模式。

行为模式一种有11种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

这23种设计模式并不是相互独立的,它们之间也有相互的联系。

本篇中要讲的是单例模式。

单例模式顾名思义,就是指本系统中只允许存在一个实例。它是一个比较基本的模式,我们日常设计中经常使用到的设计模式之一,比方说我们经常使用的线程池,缓存,对话框,打印机,日志对象,显卡等设备驱动,这类对象只能有一个势力,如果制作多个势力,就可能会导致一些问题。通过单例模式,我们可以方便对实例的个数进行控制从而节省一些系统开销。在单例模式中,我们有饿汉模式和懒汉模式。字面理解,饿汉模式就是肚子饿了,一开始就把单例创建出来了,懒汉模式就是肚子不饿,等到肚子饿时(系统调用)才去创建。 恶汉模式是线程安全的,懒汉模式因为在调用时创建,所以是非线程安排。
在创建单例模式时,我们一般都需要把构造方法私有化,然后再我们的类中声明一个静态方法,调用这个方法获取实例。

饿汉模式

hungrypattern 

/**
 * 饿汉模式
 * @author studyjun
 *
 */
public class HungryPattern {
     
         
    private static HungryPattern hPattern = new HungryPattern();
     
    private HungryPattern(){
         
    }
     
    public static HungryPattern getInstance(){
        return hPattern;
    }
}

懒汉模式

lazypattern 

/**
* 懒汉模式
* @author studyjun
*
*/
public class LazyPattern {
    private static LazyPattern lPattern = null;
     
    private LazyPattern(){
         
    }
     
    /**
     * 非线程安全
     * @return
     */
    public static LazyPattern getInstance(){
        if (lPattern==null) {
            lPattern = new LazyPattern();
        }
        return lPattern;
    }
     
     
    /**
     * 线程安全 ,效率比较差,可以修改,请看getInstance3
     * @return
     */
    public static synchronized LazyPattern getInstance2(){
        if (lPattern==null) {
            lPattern = new LazyPattern();
        }
        return lPattern;
    }
     
    /**
     * 使用“双重检查枷锁”,可以减少getInstance()使用同步,只有在lPattern为null时才进入线程同步
     * 这样就不用每次都进行线程同步,毕竟单例只需创建时同步就行。
     * 线程安全
     * @return
     */
    public static synchronized LazyPattern getInstance3(){
        if (lPattern==null) {
            synchronized(LazyPattern.class){
                if (lPattern==null) {
                    lPattern = new LazyPattern();
                }
            }
        }
        return lPattern;
    }
}

单例模式先说到这里,等有机会在多举一些例子完善


源码下载:SingletonSimple

本文转载自:http://studyjun.sinaapp.com/?p=33

共有 人打赏支持
爱学习的逃课君
粉丝 7
博文 5
码字总数 0
作品 0
广州
程序员
从 Java 到 Scala (三): object 的应用

本文由 Captain 发表在 ScalaCool 团队博客。 在上篇 Java 到 Scala 系列中,我想你或多或少在语言特性上对有了一定的掌握,在了解完它酷酷的语言特性——让静态回归常态并能简单运用其衍生出...

ScalaCool
09/10
0
0
20个设计模式和软件设计面试问题

不管是参加Java面试还是C#面试,设计模式和软件设计都是任何编程面试中的必问问题。实际上,编程能力和设计技巧是对彼此很好的补充。一个好的程序员通常都是一个好的软件设计人员。他们知道怎...

LCZ777
2014/08/13
0
0
设计模式: Java中的工厂设计模式

原文链接 https://github.com/shellhub/blog/issues/22 前言 工厂设计模式(Factory Design Pattern)属于创建模式之一,工厂设计模式在JDK,Spring,Stuts被广泛使用 当一个类或者接口有多个子类...

shellhub
08/22
0
0
设计模式 2014-12-19

book: 阎宏《JAVA与模式》 架构设计栏目 http://blog.csdn.net/enterprise/column.html 概要: http://bbs.csdn.net/forums/Embeddeddriver 23种设计模式分别是: 1.单例模式 2.工厂方法模式...

jayronwang
2014/12/19
0
0
设计模式15——Template Method设计模式

Template Method模板方法设计模式定义一个操作中算法的骨架,将具体步骤的执行延迟到子类中实现。Java中的抽象类就是使用了模板方法设计模式。模板方法设计模式结构如下: 以文档处理为例,T...

小米米儿小
2014/01/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

NIO与BIO的区别、NIO的运行原理和并发使用场景

NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的...

Java干货分享
40分钟前
1
0
Makefile 学习 1 - 基于若干 Blog 的汇总

基于若干 Blog 汇总的 makefile 教程 陈皓 https://blog.csdn.net/haoel/article/details/2886 Makefile 基础知识 1. 什么是 Makefile? 规定软件工程的编译规则。一个工程中的源文件,其按类...

公孙衍
53分钟前
1
0
72.告警系统邮件引擎 运行告警系统

20.23/20.24/20.25 告警系统邮件引擎 20.26 运行告警系统 20.23/20.24/20.25 告警系统邮件引擎 邮件首先要有一个mail.py,以下。 因为我们之前zabbix的时候做过,就可以直接拷贝过来 mail.s...

王鑫linux
今天
1
0
09-利用思维导图梳理JavaSE-

09-利用思维导图梳理JavaSE-Java IO流 主要内容 1.Java IO概述 1.1.定义 1.2.输入流 - InputStream 1.3.输出流 - OutputStream 1.4.IO流的分类 1.5.字符流和字节流 2.InputStream类 2.1.File...

飞鱼说编程
今天
3
0
Spring Cloud 微服务的那点事

在详细的了解SpringCloud中所使用的各个组件之前,我们先了解下微服务框架的前世今生。 单体架构 在网站开发的前期,项目面临的流量相对较少,单一应用可以实现我们所需要的功能,从而减少开...

我是你大哥
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部