第9章 单例模式 Website:http://www.mrheonline.com E-mail:hechaobo@foxmail.com.

Slides:



Advertisements
Similar presentations
模板的使用 教育学 江西教育学院教育系 冯芳 2012 - 10. 第二章 教育学的产生和发展 第一节 教育学的研究对象和任务 第二节 教育学的产生与发展 第三节 学习教育学的意义与方法.
Advertisements

主要内容 Java 的常用包 Java 的常用包 “ == ” 和 “ equals ” 的用法 “ == ” 和 “ equals ” 的用法 基本数据类型与引用类型 基本数据类型与引用类型 String 和 StringBuffer String 和 StringBuffer 对象的克隆( clone.
面向对象与设计模式 RD 常见编程范式介绍  并行编程 - Process-orientedProcess-oriented  组件编程 - Component-basedComponent-based  事件驱动 - Service-oriented,Time-drivenService-orientedTime-driven.
用 藥 安 全 用 藥 安 全 護 理 師 張 嘉 芬. 前 言 前 言 正確用藥的方法 藥袋上的秘辛 為了減少重大疾病或是醫療處理、 用藥不當的相關事件發生。
阿尔伯特亲王 阿尔伯特亲王纪念碑 维多利亚女王夫妇 维多利亚女王一家 建造水晶宫 水晶宫初建时的照片.
會計學 Chapter 1 基本概念 1-2 基本概念 第一節 單式簿記 第二節 會計學的定義與功用 第三節 會計學術與會計人員 第四節 企業組織 第五節 會計學基本第五節 會計學基本慣例 第六節 會計方程式 第七節 財務報表.
Chapter 5 教育發展與職業選擇. 1. 認識高職學生的生涯進路。 2. 了解個人特質與職業屬性之 間的關係。 3. 認識打工安全與勞動權益。
青蘋果的代價 參考資料 : 國中性教育教學輔助媒體 (Power Point) 教師手冊. 影片欣賞 -- 愛的晚霞 單純的阿霞人生第一次的愛情,卻是帶來身心嚴重 的傷害,阿霞要如何面對感染愛滋後的生活 …
第 9 章 物件的建構.
梦想启航 ——大学生活与职业规划专题讲座.
河北保定外国语学校 高三家长会.
《3-6岁儿童学习与发展指南》概述.
第16章 代理模式 Website:
小 王 子 組別:第五組 班級:財金二甲 組員:A 林安潔 A 陳思羽 A 許雅涵
藥物濫用 華德學校上午校 黃秀雯.
党的十八届四中全会 依法治国精神解读. 党的十八届四中全会 依法治国精神解读 一、十八届四中全会概况 中国共产党第十八届中央委员会第四次全体会议,于2014年10月20日至23日在北京举行。 全会审议通过了《中共中央关于全面推进依法治国若干重大问题的决定》。
以信息化带动教育现代化,打造教育的“南山质量”
11-1 保險業之定義 11-2 保險業之設立 11-3 保險業之組織 11-4 保險業之營業範圍
证券市场法律制度与监督管理 作者:张学亮.
个体税收征管政策讲解 浏阳市地方税务局.
封面 2015易驾考最新分享: 科目二考试方法秘诀 文章来源:易驾考官网.
基于行业的 企业技术创新信息保障体系研究 刘 华 博士 中国科学技术信息研究所.
9-1 火災保險 9-2 海上保險 9-3 陸空保險 9-4 責任保險 9-5 保證保險 9-6 其他財產保險
第四讲 1949—1991年的中苏关系 及其经验教训.
“鼠标加水泥”的百货公司——武汉中百 朱巧巧 陆嘉怡 田泽宇.
合理控制索道游客流量 确保景区可持续发展 云南丽江玉龙雪山索道 陈加林 二0一五年十一月.
千里挑一的“征途” ——浅谈中国“国考”热.
我怀念的乡村记忆 陈秀华 社会工作0841.
307暑假作業 自選部份,各項的範例!.
沟通技巧 主讲:涂育俊.
槍砲病菌與鋼鐵 第三組.
導覽解說與環境教育 CHAPTER 3 解說員.
春节 The Spring Festival. 春节 The Spring Festival.
財務報表的內容 四種報表格式 財務報表的補充說明 會計師簽證的重要性 合併報表 財務報表分析 Chapter 2 財務報表的內容.
老師 製作 法律與生活.
第十七章休閒農業之經營策略與成功之道 17 Chapter.
Chapter 2 勞工安全衛生法.
第7章 行政监督.
全球暖化 想知道全球暖化的嚴重性嗎? 那就繼續看下去吧!! 組員:陳儀君60524 蘇鈺祺60526 于玉琳60528 林宥嫻60521.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
在 线 考 试 系 统 的 设 计 学 生: 班 级: 指导老师:.
風險分析與財務結構 瞭解風險的定義與種類 衡量企業風險與財務風險 影響企業風險的因素 影響財務風險的因素 以現金流量衡量企業長期的財務狀況
國際行銷管理 林 建 煌 著.
第一節 知覺 第二節 認知 第三節 學習 第四節 創造力
世界看遍 终归回到纯水岸 波托菲诺08年终总结. 世界看遍 终归回到纯水岸 波托菲诺08年终总结.
外观模式.
CHAPTER 2 綜合所得稅之架構.
CHAPTER 9 建構方法 ROBERT.
创建型设计模式.
职责链模式.
组合模式.
简单工厂模式.
第14章 外观模式 Deng Song
辅导课程八.
第12章 组合模式 Deng Song
老師 製作 休閒農場.
心理學—日常生活中的應用 人際溝通.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Interfaces and Packages
第7章 建造者模式 Deng Song
財務預測 財務預測的用途 法令相關規定 預測的基本認知 預測的方法 製作預測性報表 財務報表分析 Chapter 16 財務預測.
喜雨亭記 國二甲 S 陳姿婷.
手机淘宝“变形”产品—微淘 操作流程指南 (内测版).
JAVA 程式設計與資料結構 第三章 物件的設計.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
自慢 社長的成長學習筆記 何飛鵬.
技專校院多元入學管道 國立臺北科技大學 教務處 涂雅筑.
團體工作的倫理議題 CHAPTER 12. 團體工作的倫理議題 CHAPTER 12 團體工作的倫理議題 1.如果我有資格執行個別治療,那麼我也可以執行團體治療。 2.仔細而審慎地篩選團體成員,較符合專業倫理要求。 3.在團體治療開始前,讓成員能先有準備以便從團體中獲得最大利益,是非常重要的。
Chapter1 大師的視界,見證歷史的腳步
Presentation transcript:

第9章 单例模式 Website:http://www.mrheonline.com E-mail:hechaobo@foxmail.com

本章教学内容 单例模式 模式动机与定义 模式结构与分析 模式实例与解析 模式效果与应用 模式扩展

单例模式 模式动机 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。

单例模式 模式动机 如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。 一个更好的解决办法是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法。这就是单例模式的模式动机。

单例模式 模式定义 单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。 单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。单例模式是一种对象创建型模式。单例模式又名单件模式或单态模式。

单例模式 模式定义 Singleton Pattern: Ensure a class has only one instance and provide a global point of access to it. Frequency of use: medium high

单例模式 模式结构

单例模式 模式结构 单例模式包含如下角色: Singleton:单例

单例模式 模式分析 单例模式的目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式包含的角色只有一个,就是单例类——Singleton。单例类拥有一个私有构造函数,确保用户无法通过new关键字直接实例化它。除此之外,该模式中包含一个静态私有成员变量与静态公有的工厂方法,该工厂方法负责检验实例的存在性并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。

单例模式 模式分析 单例模式的实现代码如下所示: public class Singleton { private static Singleton instance=null; //静态私有成员变量 //私有构造函数 private Singleton() } //静态公有工厂方法,返回唯一实例 public static Singleton getInstance() if(instance==null) instance=new Singleton(); return instance;

单例模式 模式分析 在单例模式的实现过程中,需要注意如下三点: 单例类的构造函数为私有; 提供一个自身的静态私有成员变量; 提供一个公有的静态工厂方法。

单例模式 单例模式实例与解析 实例一:身份证号码 在现实生活中,居民身份证号码具有唯一性,同一个人不允许有多个身份证号码,第一次申请身份证时将给居民分配一个身份证号码,如果之后因为遗失等原因补办时,还是使用原来的身份证号码,不会产生新的号码。现使用单例模式模拟该场景。

单例模式 单例模式实例与解析 实例一:身份证号码

单例模式 单例模式实例与解析 实例一:身份证号码 参考代码 (Chapter 09 Singleton\sample01) 演示……

单例模式 单例模式实例与解析 实例二:打印池 在操作系统中,打印池(Print Spooler)是一个用于管理打印任务的应用程序,通过打印池用户可以删除、中止或者改变打印任务的优先级,在一个系统中只允许运行一个打印池对象,如果重复创建打印池则抛出异常。现使用单例模式来模拟实现打印池的设计。

单例模式 单例模式实例与解析 实例二:打印池

单例模式 单例模式实例与解析 实例二:打印池 参考代码 (Chapter 09 Singleton\sample02) 演示……

单例模式 模式优缺点 单例模式的优点 提供了对唯一实例的受控访问。因为单例类封装了它的唯一实例,所以它可以严格控制客户怎样以及何时访问它,并为设计及开发团队提供了共享的概念。 由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象,单例模式无疑可以提高系统的性能。 允许可变数目的实例。我们可以基于单例模式进行扩展,使用与单例控制相似的方法来获得指定个数的对象实例。

单例模式 模式优缺点 单例模式的缺点 由于单例模式中没有抽象层,因此单例类的扩展有很大的困难。 单例类的职责过重,在一定程度上违背了“单一职责原则”。因为单例类既充当了工厂角色,提供了工厂方法,同时又充当了产品角色,包含一些业务方法,将产品的创建和产品的本身的功能融合到一起。 滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;现在很多面向对象语言(如Java、C#)的运行环境都提供了自动垃圾回收的技术,因此,如果实例化的对象长时间不被利用,系统会认为它是垃圾,会自动销毁并回收资源,下次利用时又将重新实例化,这将导致对象状态的丢失。

单例模式 模式适用环境 在以下情况下可以使用单例模式: 系统只需要一个实例对象,如系统要求提供一个唯一的序列号生成器,或者需要考虑资源消耗太大而只允许创建一个对象。 客户调用类的单个实例只允许使用一个公共访问点,除了该公共访问点,不能通过其他途径访问该实例。 在一个系统中要求一个类只有一个实例时才应当使用单例模式。反过来,如果一个类可以有几个实例共存,就需要对单例模式进行改进,使之成为多例模式。

单例模式 模式应用 (1) java.lang.Runtime类 public class Runtime { private static Runtime currentRuntime = new Runtime(); public static Runtime getRuntime() { return currentRuntime; } private Runtime() {} ......

单例模式 模式应用 (2) 一个具有自动编号主键的表可以有多个用户同时使用,但数据库中只能有一个地方分配下一个主键编号,否则会出现主键重复,因此该主键编号生成器必须具备唯一性,可以通过单例模式来实现。

单例模式 模式应用 (3) 默认情况下,Spring会通过单例模式创建bean实例: <bean id="date" class="java.util.Date" scope="singleton"/>

单例模式 模式扩展 饿汉式单例类

单例模式 模式扩展 懒汉式单例类

单例模式 模式扩展 饿汉式单例与懒汉式单例类比较 饿汉式单例类在自己被加载时就将自己实例化。单从资源利用效率角度来讲,这个比懒汉式单例类稍差些。从速度和反应时间角度来讲,则比懒汉式单例类稍好些。 懒汉式单例类在实例化时,必须处理好在多个线程同时首次引用此类时的访问限制问题,特别是当单例类作为资源控制器,在实例化时必然涉及资源初始化,而资源初始化很有可能耗费大量时间,这意味着出现多线程同时首次引用此类的机率变得较大,需要通过同步化机制进行控制。

本章小结 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。单例模式是一种对象创建型模式。 单例模式只包含一个单例角色:在单例类的内部实现只生成一个实例,同时它提供一个静态的工厂方法,让客户可以使用它的唯一实例;为了防止在外部对其实例化,将其构造函数设计为私有。

本章小结 单例模式的目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例类拥有一个私有构造函数,确保用户无法通过new关键字直接实例化它。除此之外,该模式中包含一个静态私有成员变量与静态公有的工厂方法。该工厂方法负责检验实例的存在性并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。 单例模式的主要优点在于提供了对唯一实例的受控访问并可以节约系统资源;其主要缺点在于因为缺少抽象层而难以扩展,且单例类职责过重。 单例模式适用情况包括:系统只需要一个实例对象;客户调用类的单个实例只允许使用一个公共访问点。

END Thanks!