14 C#设计模式-享元模式.ppt
《14 C#设计模式-享元模式.ppt》由会员分享,可在线阅读,更多相关《14 C#设计模式-享元模式.ppt(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、www.ChinaSA.infoDDesign esign P Patternsatterns享元模式享元模式享元模式享元模式刘刘 伟伟(Sunny)weiliu_www.ChinaSA.info大纲w享元模式概述w享元模式的结构与实现w享元模式的应用实例w有外部状态的享元模式w单纯享元模式和复合享元模式w享元模式的优缺点与适用环境www.ChinaSA.info享元模式概述w动机如果一个软件系统如果一个软件系统在运行时所创建的相同或相似对象在运行时所创建的相同或相似对象数量太多,将导致运行代价过高,带来系统资源浪费、数量太多,将导致运行代价过高,带来系统资源浪费、性能下降等问题性能下降等问题
2、如何如何避免系统中出现大量相同或相似的对象避免系统中出现大量相同或相似的对象,同时又,同时又不影响客户端程序通过面向对象的方式对这些对象进不影响客户端程序通过面向对象的方式对这些对象进行操作呢?行操作呢?享元模式享元模式www.ChinaSA.info享元模式概述w字符享元对象示意图www.ChinaSA.info享元模式概述w分析享元模式:享元模式:通过通过共享技术共享技术实现相同或相似对象的实现相同或相似对象的重用重用享元池享元池(Flyweight Pool):存储共享实例对象的地方存储共享实例对象的地方www.ChinaSA.info享元模式概述w分析内部状态内部状态(Intrinsi
3、c State):存储在享元对象内部并存储在享元对象内部并且不会随环境改变而改变的状态且不会随环境改变而改变的状态,内部状态可以共享内部状态可以共享(例如:字符的内容)(例如:字符的内容)外部状态外部状态(Extrinsic State):随环境改变而改变的、随环境改变而改变的、不可以共享的状态不可以共享的状态。享元对象的外部状态通常。享元对象的外部状态通常由客户由客户端保存端保存,并在享元对象被创建之后,需要使用的时候,并在享元对象被创建之后,需要使用的时候再再传入到享元对象内部传入到享元对象内部。一个外部状态与另一个外部。一个外部状态与另一个外部状态之间是状态之间是相互独立相互独立的(例如
4、:字符的颜色和大小)的(例如:字符的颜色和大小)www.ChinaSA.info享元模式概述w原理(1)将将具有相同内部状态具有相同内部状态的对象存储在的对象存储在享元池享元池中,享元中,享元池中的对象是可以实现共享的池中的对象是可以实现共享的(2)需要的时候需要的时候将对象从享元池中取出将对象从享元池中取出,即可实现对象,即可实现对象的的复用复用(3)通过向取出的对象通过向取出的对象注入不同的外部状态注入不同的外部状态,可以得到,可以得到一系列一系列相似的对象相似的对象,而这些对象在内存中实际上只存,而这些对象在内存中实际上只存储一份储一份www.ChinaSA.info享元模式概述w享元模
5、式的定义对象行为型对象行为型模式模式享享元元模模式式:运用共共享享技技术术有效地支持大量细粒度对象的复用。Flyweight Pattern:Use sharing to support large numbers of fine-grained objects efficiently.www.ChinaSA.info享元模式概述w享元模式的定义又称为又称为轻量级模式轻量级模式要求能够被共享的对象必须是要求能够被共享的对象必须是细粒度对象细粒度对象www.ChinaSA.info享元模式的结构与实现w享元模式的结构www.ChinaSA.info享元模式的结构与实现w享元模式的结构享元模式包含
6、以下享元模式包含以下4个角色:个角色:Flyweight(抽象享元类)ConcreteFlyweight(具体享元类)UnsharedConcreteFlyweight(非共享具体享元类)FlyweightFactory(享元工厂类)www.ChinaSA.info享元模式的结构与实现w享元模式的实现典型的抽象享元类代码:典型的抽象享元类代码:abstract class Flyweight public abstract void Operation(string extrinsicState);www.ChinaSA.info享元模式的结构与实现w享元模式的实现典型的具体享元类代码:典型的
7、具体享元类代码:class ConcreteFlyweight:Flyweight /内部状内部状态态intrinsicState作作为为成成员变员变量,同一个享元量,同一个享元对对象其内部状象其内部状态态是一致的是一致的 private string intrinsicState;public ConcreteFlyweight(string intrinsicState)this.intrinsicState=intrinsicState;/外外部部状状态态extrinsicState在在使使用用时时由由外外部部设设置置,不不保保存存在在享享元元对对象象中中,即即使使是是同一个同一个对对象
8、,在每一次象,在每一次调调用用时时可以可以传传入不同的外部状入不同的外部状态态 public override void Operation(string extrinsicState)/实现业务实现业务方法方法 www.ChinaSA.info享元模式的结构与实现w享元模式的实现典型的非共享具体享元类代码:典型的非共享具体享元类代码:class UnsharedConcreteFlyweight:Flyweight public override void Operation(string extrinsicState)/实现业务方法 www.ChinaSA.info享元模式的结构与实现w享
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 14 C#设计模式-享元模式 C# 设计 模式
限制150内