zoukankan      html  css  js  c++  java
  • 常见的设计模式 ----- 单例模式

    单例模式(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。

    例1:最常用的单例模式

     1 public class SingleDemo {
     2 
     3     // 在类加载的同时已经创建好一个静态对象,调用时反应速度快
     4     // 资源利用率不高
     5     private static SingleDemo obj = new SingleDemo();
     6 
     7     // 私有构造函数
     8     private SingleDemo (){
     9     }
    10     
    11     public static SingleDemo getInstance() {
    12         return obj;
    13     }
    14 }

    例2:资源利用率高的单例

     1 public class SingleDemo {
     2 
     3     // 私有构造函数
     4     private SingleDemo (){}
     5 
     6     // 静态内部类
     7     // 资源利用率高, 不执行getInstance就不会被实例,可以执行该类其他静态方法
     8     public static class SingleFactory {
     9         public static SingleDemo obj = new SingleDemo();
    10     }
    11 
    12     public static SingleDemo getInstance() {
    13         return SingleFactory.obj;
    14     }
    15 }

    例3:不推荐使用的单例

     1 public class SingleDemo {
     2 
     3     // 对象实例
     4     private static SingleDemo obj;
     5 
     6     // 私有构造函数
     7     private SingleDemo (){}
     8 
     9     // 获得该类的一个实例,多线程的场合,要考虑排它锁
    10     // 可以对该方法加锁,也可以对该实例加锁
    11     // 加锁,能够保证在同一时刻最多只有一个线程执行该段代码。
    12     // 对该方法加锁的话,可能会影响系统的并发效率,增加系统开销
    13     public static synchronized SingleDemo getInstance() {
    14         
    15         if (obj == null) {
    16             obj = new SingleDemo();
    17             return obj;
    18         }
    19         return obj;
    20     }
    21 
    22     // 对该实例加锁的例子
    23     // 不推荐使用,在obj分配内存但还未初始化的时候,容易出错
    24     public static SingleDemo getInstance2() {
    25         
    26         if (obj == null) {
    27             synchronized (obj) {
    28                 if (obj == null) {
    29                     obj = new SingleDemo();
    30                 }
    31             }
    32         }
    33         return obj;
    34     }
    35 }
  • 相关阅读:
    课后作业-阅读任务-阅读提问-2
    课后作业-阅读任务-阅读提问-3
    结对-贪吃蛇-需求分析
    《团队-团队编程项目作业名称-最终程序》
    《20171130-构建之法:现代软件工程-阅读笔记》
    课后作业-阅读任务-阅读提问-4
    团队-井字棋游戏-项目总结
    《软件工程课程总结》
    团队编程项目作业5-小组评分
    课后作业-结对编程项目总结
  • 原文地址:https://www.cnblogs.com/keyiei/p/3594033.html
Copyright © 2011-2022 走看看