第五章创建型设计模式技术方案.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5.4.2 单件模式的意图和适用性 模式的意图 保证一个类仅有一个实例,并提供一个访问 它的全局访问点。 5.4.2 单件模式的意图适用性 在下面的两种情况下均可使用Singleton模式: 当类只能有一个实例而且用户可以从一个众所周知的访问点访问它时。 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。 5.4.3 单件模式的结构和参与者 单件模式结构图 UML结构图 参与者说明 Client 创建或调用这个单件实例的客户端。 Sigleton 被调用的单件对象。 5.4.3 单件模式的结构和参与者 Singleton 定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类操作(即C++中的一个静态成员函数) 。 可能负责创建它自己的唯一实例。 Class Singleton{ //单件模式的定义 public: static Singleton* Instance(); //客户通过该成员函数访问单件 protected: Singleton(); //构造函数为受保护型,直接实例化将出错 private: static Singleton* _instance; //指向本身的一个唯一实例的指针 }; 5.4.4 应用举例 相应的实现是 Singleton * Singleton::_instance = 0; //初始化类成员 Singleton* Singleton::Instance(){ If(_instance == 0){ _instance =new Singleton; //如果成员变量为0,则唯 //一实例化 } return _instance; } 5.4.4 应用举例 思考: 单例模式的加锁问题 单例模式的其他实现方法? Spring的单例模式 5.4.5 效果分析 对唯一实例的受控访问 因为Singleton类封装它的唯一实例,所以它可以严格的控制客户怎样以及何时访问它。 缩小名空间 Singleton模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染名空间。 允许对操作和表示的精化 Singleton类可以有子类,而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。 允许可变数目的实例 这个模式使得你易于改变你的想法,并允许Singleton类的多个实例。此外,你可以用相同的方法来控制应用所使用的实例的数目。只有允许访问Singleton实例的操作需要改变。 比类操作更灵活 另一种封装单件功能的方式是使用类操作(即C++中的静态成员函数或者是Smalltalk中的类方法)。但这两种语言技术都难以改变设计以允许一个类有多个实例。此外,C++中的静态成员函数不是虚函数,因此子类不能多态的重定义它们。 5.4.5 效果分析 5.5 原型(prototype)模式 一、原型模式的由来 二、原型模式的意图及适用性 三、原型模式的结构及参与者 四、应用举例 五、效果分析 5.5.1 原型模式的由来 在软件系统中,客户希望创建一个类对象(产品)时,可能有三种情况: 知道产品具体型号-使用new运算符创建 不知道型号,知道特定的需求-使用工厂模式 不知道需求,但想要一个和已知对象相同的对象-使用原型模式 5.5.1 原型模式的意图和适用性 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 5.1.2 原型模式的意图和适用性 在下列情况下,应当使用Prototype模式: 1.当一个系统应该独立于它的产品创建,构成和表示时; 2.当要实例化的类是在运行时刻指定时,例如,通过动态装载; 3.为了避免创建一个与产品类层次平行的工厂类层次时; 5.1.2 原型模式的结构和参与者 1)客户(Client)角色:客户端类向原型管理器提出创建对象的请求。 2)抽象原型(Prototype)角色:它是对各种具体原型的抽象,通常由一个C#接口或抽象类实现。 3)具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象的原型角色所要求的接口。 4)原型管理器(Prototype Manager)角色:创建具体原型类的对象,并记录每一个被创建的对象。 5.1.3 应用举例 假定我们要开发一个调色板,用户单击调色板上任一个方块,将会返回一个对应的颜色的实例,下面我们看看如何通过原型模式来达到系统动态加载具体产品的目的。 5.1.3 应用举例 使用原型模式开发调色板的结构图: ColorManager 5.1.3 应用举例 abstract class ColorPrototype//抽象的原型 {

文档评论(0)

挺进公司 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档