1.单例设计模式(singleton)

用途举例:对于多个程序使用同一个配置信息对象时比如在连接数据库时使用单例模式,每次只取出一个连接

步骤:①私有化该类的构造函数

②私有化一个静态的对象

③公有化一个静态方法,将创建的对象返回

懒汉式 模板:

/**
* 懒汉式:初始化的时候就会构造一个实例,消耗内存,但是不用考虑多线程的问题
* @author
*/
public class Singleton {
private Singleton(){ }
private static Singleton singleton = new Singleton();
public static Singleton getInstance(){
return singleton;
}
}

饿汉式模板:

/**
* 饿汉式:延迟初始化这个单例实例 ,要考虑多线程同时请求初始化的问题
* 延迟初始化原因:①静态初始化时,没有足够的信息对单例进行初始化
* ②与获取资源有关,例如数据库连接,尤其在一个特定会话中,它包含的应用程序并不需要该对象实例时
*
*/
public class SingletonOfHungry {
private static Object classLock = SingletonOfHungry.class;
private SingletonOfHungry() {
}
private static SingletonOfHungry singletonOfHungry = null;
public static SingletonOfHungry getInstance(){
synchronized (classLock){//同步
if (singletonOfHungry == null){
singletonOfHungry = new SingletonOfHungry();
}
return singletonOfHungry;
}
}
}

饿汉式demo:

/**
* 未初始化饿汉式单例工厂
*/
public class Factory {
private long num;
private static Object classLock = Factory.class; private Factory(){
num = 0;
}
private static Factory factory;
public static Factory getFactory(){
synchronized (classLock){
if (factory==null){
factory = new Factory();
}
return factory;
}
} public void recordNum(){
synchronized (classLock){
num++;
}
}
}

获得实例还可以这么写:

public static Factory getFactory(){
if(factory==null){ //当实例化之后就不需要再加锁
synchronized (classLock){
if (factory==null){ //防止在加锁后,被其他线程实例化,此时也不需要实例化
factory = new Factory();
}
}
}
return factory;
}

【design patterns】设计模式的更多相关文章

  1. Start Developing Mac Apps -- Design Patterns 设计模式

    Design Patterns A design pattern solves a common software engineering problem. Patterns are abstract ...

  2. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  3. Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】

    原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...

  4. 设计模式(Design Patterns)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  5. Design Patterns in Smalltalk MVC 在Smalltalk的MVC设计模式

    Design Patterns in Smalltalk    MVC在Smalltalk的MVC设计模式 The Model/View/Controller (MVC) triad ofclasse ...

  6. 设计模式(Design Patterns)Java版

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  7. 云设计模式-Design patterns for microservices

    云设计模式 https://azure.microsoft.com/zh-cn/blog/design-patterns-for-microservices/ https://www.cnblogs. ...

  8. Java设计模式(Design Patterns)——可复用面向对象软件的基础

    设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用设计模式是为了可重用代码.让代码更容易被他 ...

  9. Streamline Your App with Design Patterns 用设计模式精简你的应用程序

    Back to Design Patterns Streamline Your App with Design Patterns 用设计模式精简你的应用程序 In Objective-C progra ...

  10. 图书-软件架构:《Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》一书)

    ylbtech-图书-软件架构:<Design Patterns: Elements of Reusable Object-Oriented Software>(即后述<设计模式&g ...

随机推荐

  1. MWeb for Mac使用教程-如何在文档库中快速搜索

    使用MWeb for Mac专业的 Markdown 编辑写作软件,可以让你随时记录自己的想法,灵感,创意,为您的工作节省宝贵的时间.本篇文章带来的是MWeb for Mac如何在文档库中快速搜索使用 ...

  2. java学习(二)

    学号 20189214 <Java程序设计>第二周学习总结 教材学习内容总结 java类 创建java对象需要类似的模板,即类(class) java对象也拥有属性和能够执行的动作. 属性 ...

  3. Linux无法正常连接服务器,无法连接上 127.0.0.1:8989 (127.0.0.1)。 - connect (111: 拒绝连接)

    最近修改了下电脑的hosts文件,电脑就突然不能连接下载更新的服务器了,但是浏览器还能正常上网,这让我很是难受啊!!! 错误现象如下: 错误:1 http://archive.ubuntukylin. ...

  4. C#将结构体和指针互转的方法

    . 功能及位置 将数据从托管对象封送到非托管内存块,属于.NET Framework 类库 命名空间:System.Runtime.InteropServices 程序集:mscorlib(在 msc ...

  5. vue中使用axios

    1.结合vue-axios使用 vue-axios是按照vue插件的方式去写的,那么结合vue-axios就可以使用Vue.use()这个方法import axios from 'axios' imp ...

  6. css响应式

    <meta name="viewport" content="width=devicw-width,initial-scale=1.0"> 响应式图 ...

  7. Python Day 9

    阅读目录: 内容回顾 内存管理 ##内容回顾 #文件处理 #1.操作文件的三步骤 -- 打开文件:硬盘的空间被操作系统持有 | 文件对象被应用程序持续 -- 操作文件:读写操作 -- 释放文件:释放操 ...

  8. django中的modelform和modelfoemset

    一. ModelForm ModelForm是根据Model来定制的Form 二. ModelForm的创建 from django import forms from app import mode ...

  9. Win7 VS2017 NASM编译FFMPEG(2018.12.22)

    今天无意中在gayhub发现个牛逼工程,全VS工程编译FFMPEG库,包括依赖库全是VS生成的,无需Mingw等Linux环境. 简单记录下过程,以防将来重装系统等情况,备忘. https://git ...

  10. input checkbox复选框取值

    <table> <!--列表表头 开始 --> <tr class="ui-widget ui-state-hover" style="he ...