码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2019-01-01 11:12:56      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:常用   带来   自己   计算机   有一个   normal   限制   重要   window   

一、单例模式概念

  单例模式(singleton pattern):是一种常用的软件设计模式。在它的核心结构中包含一个被称为单例的特殊类。应用该模式的类只能产生一个对象的实例。

二、单例模式的应用场景  

  对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要。
  在计算机系统中,需要管理的资源包括软件外部资源,譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler, 以避免两个打印作业同时输出到打印机中。每台计算机可以有若干传真卡,但是只应该有一个软件负责管理传真卡,以避免出现两份传真作业同时传到传真卡中的情况。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。
  需要管理的资源包括软件内部资源,譬如,大多数的软件都有一个(甚至多个)属性(properties)文件存放系统配置。这样的系统应当由一个对象来管理一个属性文件。
需要管理的软件内部资源也包括譬如负责记录网站来访人数的部件,记录软件系统内部事件、出错信息的部件,或是对系统的表现进行检查的部件等。这些部件都必须集中管理,不可整出多头。
  这些资源管理器构件必须只有一个实例,这是其一;它们必须自行初始化,这是其二;允许整个系统访问自己这是其三。因此,它们都满足单例模式的条件,是单例模式的应用。
三、单例模式的特征
  3.1只能产生一个对象的实例。
    通过构造器私有化来限制外部创建该对象实例。
  3.2在类中定义静态的,私有对象。
    private static ...
  3.3提供静态共有的函数(方法)用于创建返回这个静态私有唯一对象给外部访问。
    public static ...
四、单例模式的创建方式及其示例
  单例模式分为饿汉式、懒汉式两种。
  4.1饿汉式(指全局的单例实例在类装载时创建)
  
package edu.aeon.model.singleton;
/**
 * 单例模式:饿汉式(类装载时创建)
 * 步骤:
 *     1.构造器私有化(防止外部new)
 *     2.提供静态的、私有的代表该对象的实例
 *     3.提供静态的、公开的函数(方法)供外部访问应用该模式唯一实例
 * @author aeon
 */
public class HungrySingleton {
    //1.构造器私有化(防止外部new)
    private HungrySingleton(){};
    //2.提供静态的、私有的代表该对象的实例
    private static HungrySingleton hungrySingletonInstance=new HungrySingleton();
    //3.提供静态的、公开的函数(方法)供外部访问应用该模式唯一实例
    public static HungrySingleton getSinletonInstance(){
        return hungrySingletonInstance;
    }
}
  4.2懒汉式(调用时创建)
    
package edu.aeon.model.singleton;
/**
 * 单例模式:懒汉式(类装载及创建)
 * 步骤:
 *     1.构造器私有化(防止外部new)
 *     2.提供静态的、私有的代表该对象的实例的空引用
 *     3.提供静态的、公开的函数(方法)供外部访问
 * @author aeon
 */
public class LazySingleton {
    //1.构造器私有化(防止外部new)
    private LazySingleton(){}
    //2.提供静态的、私有的代表该对象的实例的空引用(调用时才给值)
    private static LazySingleton lazySingletonInstance=null;
    //3.提供静态的、公开的函数(方法)供外部访问应用该模式唯一实例
    public static LazySingleton getLazySingletonInstance(){
        if(null==lazySingletonInstance){
            lazySingletonInstance=new LazySingleton();
        }
        return lazySingletonInstance;
    }
}

 

单例模式

标签:常用   带来   自己   计算机   有一个   normal   限制   重要   window   

原文地址:https://www.cnblogs.com/aeon/p/10204154.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!