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. graph_base_pic_segmentation里面的细节和代码

    https://github.com/zhangbo2008/graph_base_pic_segmentation_analyzing/blob/master/README.md

  2. spring实现listener(转)

    博主说未经同意,不能转载,我这种小码农,他应该不会在乎 原创地址:http://blog.csdn.net/caihaijiang/article/details/8629725 spring 允许 ...

  3. MongoDB学习记录(二) - MongoDB的"增查改删"操作之"增"

    如果做插入文档操作的集合不存在,那么集合将被创建 db.collection.insertOne() insertOne为collection插入一条文档,如果文档的_id字段未指定,MongoDB会 ...

  4. JavaScript RegExp(正则)

    第一种方式是直接通过/正则表达式/写出来,第二种方式是通过new RegExp('正则表达式')创建一个RegExp对象. 两种写法是一样的: var re1 = /ABC\-001/; var re ...

  5. angularJs 2-quickstart学习记录

    angular官网文档 我尝试文档中下载<快速起步>种子的方法进行quickstart. cd quickstart npm install npm start npm install 这 ...

  6. wzyxidian Scanner 与 Readable 的read()方法

    Readable接口中的read()方法实现了将字符串读入charBuffer中,但是只有在需要输出的时候才会调用. Scanner是文本扫描器类,利用Scanner扫描并输出charBuffer中的 ...

  7. 使用Jmeter进行http接口做功能、性能测试

    在测试移动APP时,会有很多接口需要做测试,我在这里介绍一下对HTTP接口做功能.性能的测试.首先我们会从开发人员拿到接口数据.     一.测试需求描述 1. 本次测试的接口为http服务端接口 2 ...

  8. (转载)python 命名.py 不能与模块相同,否则会报错

    在学习python网页爬虫时,测试requests的post方法进行表单提交时,命名.py文件为requests.py 代码如下: import requests params={'firstname ...

  9. BP神经网络算法推导及代码实现笔记zz

    一. 前言: 作为AI入门小白,参考了一些文章,想记点笔记加深印象,发出来是给有需求的童鞋学习共勉,大神轻拍! [毒鸡汤]:算法这东西,读完之后的状态多半是 --> “我是谁,我在哪?” 没事的 ...

  10. Promise实战AJAX封装

    一.利用Promise的知识,对最开始的ajax的例子进行一个简单的封装: var url = 'xxx'; // 封装一个get请求的方法 function request(url){ return ...