设计模式1.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
设计模式1.ppt

设计模式 Design Patterns 概述 导致重新设计的一般原因 通过显式指定一个类来创建对象 对特殊操作的依赖 对硬件和软件平台的依赖 对对象表示和实现的依赖 对算法的依赖 紧耦合 通过生成子类来扩充功能 不能方便地对类进行修改 概述 继承、组合、参数化类型 类继承与接口继承的比较 继承与组合的比较 继承与参数化类型的比较 概述 可复用模式 概述 什么是设计模式 设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。 每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。 概述 设计模式编目 创建型模式 创建型模式的目的 使系统独立于如何创建、组合和表示对象。 类创建型模式使用继承改变被实例化的类。 对象创建型模式将实例化委托给另一个对象。 什么是单例(Singleton)模式 作为对象的创建模式[GOF95],单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。 单例模式的三个要点: 只能有一个实例; 必须自行创建这个实例; 它必须自行向整个系统提供这个实例。 0.什么是单例(Singleton)模式 一个例子:Windows 回收站 在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。 1.单例模式的结构 单例类的简略类图如下所示。 2.单例模式的实例化形式 饿汉式单例类 饿汉式单例类是在Java 语言里实现得最为简便的单例类。 此类自己将自己实例化. 2.单例模式的实例化形式 饿汉式单例类代码清单: public class EagerSingleton { //加载时就实例化 private static final EagerSingleton m_instance = new EagerSingleton(); //私有的构造方法 private EagerSingleton() { } //静态工厂方法 public static EagerSingleton getInstance() { return m_instance; } } 2. 单例模式的实例化形式 懒汉式单例类 与饿汉式单例类相同之处是,类的构造方法是私有的。 与饿汉式单例类不同的是,懒汉式单例类在第一次被引用时将自己实例化。如果加载器是静态的,那么在懒汉式单例类被加载时不会将自己实例化。 2. 单例模式的实例化形式 懒汉式单例类代码清单: public class LazySingleton{ private static LazySingleton m_instance = null; private LazySingleton() { } //静态工厂方法,在获取实例时才实例化 synchronized public static LazySingleton getInstance(){ if (m_instance == null){ m_instance = new LazySingleton(); } return m_instance; } } 3.在什么情况下使用单例模式? 使用单例模式的条件 使用单例模式有一个很重要的必要条件:在一个系统要求一个类只有一个实例时才应当使用单例模式。反过来说,如果一个类可以有几个实例共存,那么就没有必要使用单例类。 但是做到上面这一点并不容易,下面就是一些这样的情况。 4.在什么情况下使用单例模式? 例子一 问:我的一个系统需要一些“全程”变量。学习了单例模式后,我发现可以使用一个单例类盛放所有的“全程”变量。请问这样做对吗? 答:这样做是违背单例模式的用意的。单例模式只应当在有真正的“单一实例”的需求时才可使用。 一个设计得当的系统不应当有所谓的“全程”变量,这些变量应当放到它们所描述的实体所对应的类中去。将这些变量从它们所描述的实体类中抽出来,放到一个不相干的单例类中去,会使得这些变量产生错误的依赖关系和耦合关系。 4.在什么情况下使用单例模式? 例子二 问:我的一个系统需要管理与数据库的连接。学习了单例模式后,我发现可以使用一个单例类包装一个Connection 对象,并在finalize()方法中关闭这个Connection 对象。这样的话,在这个单例类的实例没有被人引用时,这个finalize()对象就会被调用,因此,Connection 对象就会被释放。这多妙啊。 答:这样做是不恰当的。除非有

您可能关注的文档

文档评论(0)

cjlfjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档