设计模式学习—单列模式

  1. 动机:对于系统来说,某些类只需要有一个实例或必需只能有一个实例(a.降低资源消耗;b.减少对象创建消耗的时间;c.减轻GC压力)
  2. 结构:
       
3.优缺点
    1. 优点:
      1. 提供了对惟一实例的受控访问。
      2. 节省系统资源
    2. 缺点:
      1. 由于单例模式中没有抽象层,因此单例类的扩展有很大的困难
      2. 单例类的职责过重
      3. 滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出
     4.用例:任务管理器、ID生成器、计时工具、Runtime
     5.代码:

package cn.com.tnjun.singlerow;
/**
 * 饿汉单列模式(若单列创建比较慢会导致系统启动变慢)
 * @author ilmlife(ilmlife @163.com)
 * <pre>2013 -12- 15下午10:47:15</pre>
 */
public class Singleton {
       private static Singleton singleton = new Singleton();
       private Singleton(){
             //same function as singlerow
      }
       public static Singleton getInstance(){
             return singleton ;
      }
}

/**
 * 懒汉单列模式(懒加载方式:在获取实例时,竞争越大,耗时越多。且只有第一次需要同步)
 * @author ilmlife(ilmlife @163.com)
 * <pre>2013 - 12- 15下午10:47:15 </pre>
 */
public class Singlerow {
       private static Singlerow singlerow;
       private Singlerow(){
             //防止被直接new实例化   
      }
       /**
       * synchronized防止线程产生多个实例
       * @return Singlerow
       */
       public static synchronized Singlerow getInstance(){
             if(singlerow == null){
                   singlerow = new Singlerow();
            }
             return singlerow ;
      }
}

/**
 * 双重检查锁(参见单例模式(双重检查锁之无序写入))
 * @author ilmlife(ilmlife @163.com)
 * <pre>2013 - 12- 15下午10:47:15 </pre>
 */
public class Singlerow {
       private static Singlerow singlerow;
       private Singlerow(){
             //防止被直接new实例化   
      }
       /**
       * synchronized防止线程产生多个实例
       * @return Singlerow
       */
       public static Singlerow getInstance(){
             if(singlerow == null){
                   synchronized (Singlerow.class) {
                         if(singlerow == null){
                               singlerow = new Singlerow();
                        }
                  }
            }
             return singlerow ;
      }
}

/**
 * 内部类延迟加载机制(使用内部类避免使用同步关键字)
 *@author tnjun(tnjun123456@163.com)
 * <pre>2013 -11- 9</pre>
 */
public class SingleInner {
       private SingleInner(){}
      
       private static class SingleHolder{
             private static SingleInner instance = new SingleInner();
      }
      
       public static SingleInner getInstance(){
             return SingleHolder.instance;
      }
}





### 关于单例模式的设计模式 单例模式是一种常用的软件设计模式,其目的是确保一个类只有一个实例,并提供全局访问点。这种模式通常用于管理共享资源,例如数据库连接池、线程池等场景。 #### 单例模式的核心特性 - **唯一性**:在整个应用程序生命周期中,只存在一个实例。 - **全局访问**:可以通过统一的接口获取该实例。 - **延迟初始化**:只有当第一次使用时才创建实例[^1]。 以下是基于Java语言实现的一个典型单例模式示例: ```java public class Singleton { private static volatile Singleton instance; // 私有化构造函数防止外部实例化 private Singleton() {} public static Singleton getInstance() { if (instance == null) { // 第一次检查 synchronized (Singleton.class) { if (instance == null) { // 第二次检查 instance = new Singleton(); // 创建实例 } } } return instance; } // 提供业务方法 public void showMessage() { System.out.println("This is a singleton pattern example."); } } ``` 此代码实现了双重校验锁机制(Double-Checked Locking),既保证了线程安全又提高了性能[^1]。 --- #### 哈尔滨工业大学课程相关内容推测 哈尔滨工业大学在计算机科学与技术及相关专业的课程体系中,可能会涉及以下方面的教学内容: 1. **设计模式基础理论**:介绍常见的23种GOF设计模式及其分类(创建型、结构型、行为型)。 2. **单例模式的应用场景**:讨论如何在实际开发中应用单例模式解决特定问题,例如配置文件读取器、日志记录器等[^1]。 3. **多线程环境下的优化策略**:分析懒汉式加载可能导致的并发问题以及解决方案(如volatile关键字的作用)。 如果需要具体的作业题目或考试重点,可以根据以往的教学经验给出如下示例: ##### 示例作业题 1. 编写一段程序验证饿汉式和懒汉式的区别,并解释各自的优缺点。 2. 使用反射尝试破坏单例模式的安全性,并提出改进措施。 3. 结合Spring框架源码分析其中的单例注册与销毁过程。 --- #### 推荐的学习资源 对于深入研究单例模式及其他设计模式的学生来说,可以参考以下书籍和在线资料: - 《Head First Design Patterns》:适合初学者入门的经典教材。 - 《Design Patterns: Elements of Reusable Object-Oriented Software》(GoF四人组原著):权威性和实用性兼具的好书。 - 官方文档及开源项目实践案例:通过阅读MyBatis、Hibernate等框架源码了解工业级实现细节[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值