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. python基础之Day21

    对象整合了操作数据的方法 1.init方法 调用类时自动触发,为对象初始化自己独有的特征 class people: def __init__(self,name,age,sex): self.nam ...

  2. 错误 : 资产文件“项目\obj\project.assets.json”没有“.NETCoreApp,Version=v2.0”的目标。确保已运行还原,且“netcoreapp2.0”已包含在项目的 TargetFrameworks 中。

    升级 vs201715.6.3之后发布出现 错误 : 资产文件“项目\obj\project.assets.json”没有“.NETCoreApp,Version=v2.0”的目标.确保已运行还原,且 ...

  3. ci框架nginx访问

    url:http://localhost:20082/index.php/welcome/index 问题:apache环境下可以访问,nginx环境下不可以

  4. docker_sd

    docker exec --user jovyan -d jupyter nohup jupyter nbconvert --ExecutePreprocessor.timeout=-1 --Code ...

  5. Java第4次实训作业

    编写"电费管理类"及其测试类. 第一步 编写"电费管理"类 私有属性:上月电表读数.本月电表读数 构造方法:无参.2个参数 成员方法:getXXX()方法.se ...

  6. java37

    1.键盘录入格式: Scanner sc = new Scanner(System.in); int i = sc.nextInt();//录入整数 字符: Scanner sc1 = new Sca ...

  7. mysql第一课,数据库的简单简单操作方法(配图略虐狗)

    mysql -u root -p 并输入密码进入mysql管理界面 show databases; 显示数据库列表 use 数据库名; 进入该数据库 show tables;显示表列表 建立新表 添加 ...

  8. 实战操作——通过wireshark查看任意qq好友IP

    今天有群里好友问我如何查看别人IP,查IP这个东西对于一些刚入门的小白来说可能是一个比较高大上的玩意,但是实际上只需一个网络协议分析工具就OK,废话不多说,下面开始实践 实验对象:任意QQ好友 操作工 ...

  9. php5.6,Ajax报错,Warning: Cannot modify header information - headers already sent in Unknown on line 0

    php5.6ajax报错 Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be remo ...

  10. java上传文件获取跟目录的办法

    在java中获得文件的路径在我们做上传文件操作时是不可避免的.web 上运行1:this.getClass().getClassLoader().getResource("/"). ...