【design patterns】设计模式
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】设计模式的更多相关文章
- Start Developing Mac Apps -- Design Patterns 设计模式
Design Patterns A design pattern solves a common software engineering problem. Patterns are abstract ...
- Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】
原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...
- Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】
原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...
- 设计模式(Design Patterns)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- Design Patterns in Smalltalk MVC 在Smalltalk的MVC设计模式
Design Patterns in Smalltalk MVC在Smalltalk的MVC设计模式 The Model/View/Controller (MVC) triad ofclasse ...
- 设计模式(Design Patterns)Java版
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 云设计模式-Design patterns for microservices
云设计模式 https://azure.microsoft.com/zh-cn/blog/design-patterns-for-microservices/ https://www.cnblogs. ...
- Java设计模式(Design Patterns)——可复用面向对象软件的基础
设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用设计模式是为了可重用代码.让代码更容易被他 ...
- Streamline Your App with Design Patterns 用设计模式精简你的应用程序
Back to Design Patterns Streamline Your App with Design Patterns 用设计模式精简你的应用程序 In Objective-C progra ...
- 图书-软件架构:《Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》一书)
ylbtech-图书-软件架构:<Design Patterns: Elements of Reusable Object-Oriented Software>(即后述<设计模式&g ...
随机推荐
- vue中v-for的使用
本人正在开始学习Vue,每天写写基础的记录,希望对大家有帮助,如有错误还望指出,我也是一个小白,也希望大家能一起进步 v-for指令的使用: 1.循环普通数组 item in list 中的item是 ...
- ldd源码编译出现的问题
1.Fix it to use EXTRA_CFLAGS. Stop 1). # make KBUILD_NOPEDANTIC=12). Relace all CFLAGS with EXTRA_C ...
- 运用PIL库 用来美白,磨皮,瘦脸等操作!
1.安装pillow库: 在cmd下,输入简单的命令: pip install pillow 即可安装pillow库. 2.PIL库的简介: 1. PIL库主要有2个方面的功能: (1) 图像归档: ...
- C++题解:Matrix Power Series ——矩阵套矩阵的矩阵加速
Matrix Power Series r时间限制: 1 Sec 内存限制: 512 MB 题目描述 给定矩阵A,求矩阵S=A^1+A^2+--+A^k,输出矩阵,S矩阵中每个元都要模m. 数据范围: ...
- 未能加载文件或程序集“ .....WebUI ”或它的某一个依赖项,试图加载格式不正确的程序
编译Web网站没有问题(需要引用oracle.dataAccess.dll),在运行时报错如下: 解决: 1. 将项目编译生成x86模式(win7 64位) 2. 有可能本机运行有问题,发布到IIS, ...
- submit与execute区别
1.可以接受的任务类型 submit: execute: 可以看出: execute只能接受Runnable类型的任务 submit不管是Runnable还是Callable类型的任务都可以接受,但是 ...
- sudo -iu [用户] 命令无法正常切换到用户目录的原因
今天干活时遇到一个问题,在sudo -iu [用户]命令执行后无法切换到用户对应的[ 用户@机器 ~$ ]命令行 .bashrc已正常配置为 if [ -f /etc/bashrc ]; then . ...
- Exp4 恶意代码分析 20154320 李超
恶意代码 概述 恶意代码是指故意编制或设置的.对网络或系统会产生威胁或潜在威胁的计算机代码.最常见的恶意代码有计算机病毒(简称病毒).特洛伊木马(简称木马).计算机蠕虫(简称蠕虫).后门.逻辑炸弹等. ...
- SQL给数据编号
方法:ROW_NUMBER() over(order by getdate()) AS num 使用案例 : select * From (select ROW_NUMBER() over(orde ...
- 【.NET Core项目实战-统一认证平台】第六章 网关篇-自定义客户端授权
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我们介绍了网关使用Redis进行缓存,并介绍了如何进行缓存实现,缓存信息清理接口的使用.本篇我们将介绍如何实现网关自定义客户端授权, ...