zhjr07-GoF创建型模式-单例模式.ppt_第1页
zhjr07-GoF创建型模式-单例模式.ppt_第2页
zhjr07-GoF创建型模式-单例模式.ppt_第3页
zhjr07-GoF创建型模式-单例模式.ppt_第4页
zhjr07-GoF创建型模式-单例模式.ppt_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机学院软件工程系设计模式,授课:张金荣Email:zhjr2000zhjrQQ:zhjr(即1211460305)电话GoF-创建型模式,第3章,3.1SimpleFactoryPattern(简单工厂模式)3.2FactoryMethodPattern(工厂方法模式)3.3AbstractFactoryPattern(抽象工厂模式)3.4BuilderPattern(建造者模式)3.5PrototypePattern(原型模式)3.6SingletonPattern(单例模式),目录,GoF-创建型模式,第3章,FactoryPattern(工厂模式),SingletonPattern(单例模式),本章重点:,本章难点:,BuilderPattern(建造者模式),AbstractFactoryPattern(抽象工厂模式),3.6SingletonPattern(单例模式),如何创建一个对象?,newMyObject();,要使用new必须要求什么?,3.6SingletonPattern(单例模式),能否多次实例化一个类取决于:,所以,那么究竟如何生产单例?,3.6SingletonPattern(单例模式),:,想一想static关键字的使用,3.6SingletonPattern(单例模式),:,3.6SingletonPattern(单例模式),3.6SingletonPattern(单例模式),3.6SingletonPattern(单例模式),上面的经典的单例模式完美吗?,在涉及多线程时会出问题。如何纠正?请仔细看书89-91页,3.6SingletonPattern(单例模式),importjava.util.*;ClassSingletonprivatestaticSingletoninstance;/注意采用PrivateprivateSingleton()publicstaticSingletongetInstance()if(instance=null)/1Instance=newSingleton();/2returninstance;/3,/如果两个线程同时调用该代码块,如何?,3.6SingletonPattern(单例模式),解决方法:加代码同步处理,J2SESDK中的线程同步使用同步方法Java中同步比较简单,因为所有对象都有它们与之对应的隐式管程。进入某一对象的管程,就是调用被synchronized关键字修饰的方法。当一个线程在一个同步方法内部时,所有试图调用该方法的其他线程必须等待。为了退出管程,并将对象的控制权交给其他等待的线程,拥有管程的线程仅需从同步方法中返回。方法:在方法前加synchronized关键字,3.6SingletonPattern(单例模式),使用同步语句:尽管在创建的类的内部创建同步方法是获得同步的简单和有效方法,但它并非在任何时候都有效。假设想获得不为多线程访问设计的类对象的同步访问(该类没有用到synchronized方法),而且该类不是我们自己设计的,而是第三方创建的,不能获得它的源代码,就不能在相关方法前加synchronieze修饰符。如下:Synchronzed(object)/同步的语旬,3.6SingletonPattern(单例模式),同步方法:publicsynchronizedstaticSingletongetInstance()if(instance=null)/1Instance=newSingleton();/2returninstance;/3,3.6SingletonPattern(单例模式),同步语句:publicstaticSingletongetInstance()synchronized(Singleton.class)if(instance=null)Instance=newSingleton();returninstance;,3.6SingletonPattern(单例模式),上面两种方法有什么性能上的优劣?,第二种方法需要改进吗?,有其他方式解决这个问题吗?,3.6SingletonPattern(单例模式),publicstaticSingletongetInstance()if(instance=null)synchronized(Singleton.class)if(instance=null)instance=newSingleton();returninstance;,第二种方法的改进,饿汉式单态类,importjava.util.*;classSingletonprivatestaticSingletoninstance=newSingleton();privateSingleton()publicstaticSingletongetInstance()returninstance;,这种方式有什么缺陷吗?,两种单态类的比较,饿汉式单态类在自己被加载时就将自己实例化。单从资源利用效率角度来讲,这是比懒汉式单态类稍差些。从速度和反应时间角度来讲,则比懒汉式单态类稍好些。懒汉式单态类在实例化时必须处理好在多个线程同时首次引用此类时,实例化函数内部关键段的访问限制问题。,创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,一个对象创建型模式将实例化委托给另一个对象。,第3章,小结,在这些模式中有两个不断出现的主旋律:第一,它们都将关于该系统使用哪些具体的类的信息封装起来。第二,它们隐藏了这些类的实例是如何被创建和放在一起的。整个系统关于这些对象所知道的是由抽象类所定义的接口。因此,创建型模式在什么被创建,谁创建它

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论