- 浏览: 383396 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
yanmie:
您的文章已被我们收录地址:http://www.airmyth ...
学习一下 Pixel Bender -
chaimzane:
我现在自己都有点看不懂了 实际上很简单, LocaleModu ...
Flex 优化技巧 -- 全局CSS样式模块实现RSLS 方式加载 -
muqingren:
以我现在对flex的了解,没看懂你说的........... ...
Flex 优化技巧 -- 全局CSS样式模块实现RSLS 方式加载 -
cony138:
卤煮碉堡了啊
A*寻路 -- 更加真实 的路径(一) -
jack_ye:
[/flash][/flash][/fl[u][u]ash][ ...
Alternativa3D 8 基础理论 / 概念
Flyweight (享元)模式,是结构型模式,它是运用共享技术有效的支持大量细粒度的对象。
避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类),Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度。
适用性:
1、一个应用用了大量的对象,造成很大的存储开销。
2、对象的大多数状态可以改变为外部状态
3、如果删除对象的外部状态,那么可以用相对较少的共享对象爱那个取代很多组对象
4、应用程序不依赖于对象标识。
例子:网上有很多的关于FlyWeight的例子,我这里举个例子,是在flash中能说明问题的。
有这么一个需求,在一个flash界面需要大量的显示 人物的虚拟信息,可能显示到上千个。这个人物信息你很简单,头像(男人、女人来表示性别)、名字、年龄、省份。假设,Flash cs 已经导入两张图片 分别对应的类为 MalePic FemalePic。
你可能这样定义人物类
Character.as package { import flash.display.*; import flash.text.*; public class Character extends Sprite { private var nameStr:String; private var isMale:Boolean; private var age:uint; private var province:String; private var portrait:Bitmap; private var nameLabel:TextField; private var ageLabel:TextField; private var provinceLabel:TextField public function Character(name:String,isMale:Boolean,age:uint,province:String) { cratePortrait(); cratenaMeLabel(); crateAgeLabel(); crateProvinceLabel(); setName(name); setSex(isMale); setAge(age); setProvince(province); } private function cratePortrait():void { portrait = new Bitmap(); addChild(portrait); } private function cratenaMeLabel():void { nameLabel = new TextField(); nameLabel.autoSize = TextFieldAutoSize.LEFT; addChild(nameLabel); nameLabel.x = 139; } private function crateAgeLabel():void { ageLabel = new TextField(); ageLabel.autoSize = TextFieldAutoSize.LEFT; addChild(ageLabel); ageLabel.x = 139; ageLabel.y = 20; } private function crateProvinceLabel():void { provinceLabel = new TextField(); provinceLabel.autoSize = TextFieldAutoSize.LEFT; addChild(provinceLabel); provinceLabel.x = 139; provinceLabel.y = 40; } public function setName(name:String):void { this.nameStr = name; nameLabel.text = "姓名:"+name; } public function getName():String { return nameStr; } public function setSex(isMale:Boolean):void { isMale = isMale; if(isMale) { portrait.bitmapData = new MalePic(0,0); } else { portrait.bitmapData = new FemalePic(0,0); } } public function getSex():String { return isMale?"男":"女"; } public function setAge(value:uint):void { age = value; ageLabel.text = "年龄:"+value.toString(); } public function getAge():uint { return age; } public function setProvince(value:String):void { province = value; provinceLabel.text = "省份: "+value; } public function getProvince():String { return province; } } }
然后在时间轴上面简单的写一个循环的代码,
for(var i=0;i<500;i++) { var a:Character = new Character("张一"+i,true,i,"江苏"); addChild(a); a.x = a.y = Math.random()*stage.stageWidth; }
就会发现创建过程很卡。才500个就卡成这样?,想一想,头像几乎是每一次创建一个都要new 一个BitmapData(),反正就那么2个,能不能共用呢呢,不要每次都重新new 一下,在大量的对象面前,这是很浪费的。
还好设计模式里面有一个叫做,FlyWeight的模式,享元。
下面就用FlyWeight模式看看会不会好点。
PortraitFlyweight .as package { import flash.display.*; public class PortraitFlyweight { private var isMale:Boolean; public function PortraitFlyweight(isMale:Boolean) { this.isMale = isMale; } public function getBitmapDataBySex():BitmapData { if(isMale) { return new MalePic(0,0); } else { return new FemalePic(0,0); } } } }
FlyWeightFactory .as package { public class FlyWeightFactory { private static var instance:FlyWeightFactory; public function FlyWeightFactory (){ } public static function getInstace():FlyWeightFactory { if(!instance) { instance = new FlyWeightFactory(); } return instance; } private var PortraitFlyweightArry:Array = []; public function getPortraitFlyweight(isMale:Boolean):PortraitFlyweight { var result:PortraitFlyweight = PortraitFlyweightArry[String(isMale)] as PortraitFlyweight; if(!result) { result = PortraitFlyweightArry[String(isMale)] = new PortraitFlyweight(isMale); } return result; } } }
发表评论
-
Visitor 访问者 行为模式
2009-02-25 00:55 1040Visitor 访问者 行为模式,表示一个作用于某个对象结构中 ... -
Template Method 模板方法 行为模式
2009-02-25 00:54 891Template Method 模板方法 行为模式,定义一个操 ... -
Strategy 策略 行为模式
2009-02-25 00:52 850Strategy 策略 行为模式,定义一系列的算法,把他们一个 ... -
State 状态 行为模式
2009-02-25 00:50 1077State 状态 行为模式,允许一个对象在其内部状态改变时改变 ... -
Observer 观察者 行为模式
2009-02-25 00:48 1598Observer 观察者 行为模式,定义对象的一对多的依赖关系 ... -
Memento 备忘录 行为模式
2009-02-25 00:46 1160Memento 备忘录 行为模式 ... -
Mediator 中介 行为模式
2009-02-25 00:44 1502Mediator 中介 行为 ... -
Iterator 迭代器 行为模式
2009-02-25 00:41 1854Iterator 迭代器 行为模式,提供一种顺序访问一个聚合对 ... -
Interpreter 解释器 行为模式
2009-02-25 00:40 866Interpreter 解释器 行为模式,给定一个语言,定义它 ... -
Command 命令 行为模式
2009-02-25 00:35 1327Command 命令 行为模式,将一个请求封装为一个对象 ... -
Chain of Responsibility 职责链 行为模式
2009-02-25 00:02 923Chain of Responsibility 职责链 行为模 ... -
Proxy 代理
2009-02-24 23:46 1969Proxy 代理,为其他对象提供一个代理以控制这个对象。 ... -
Facade 外观
2009-02-24 15:00 1624Facade 外观,结构型模式,为子系统中的一组接口提供一个一 ... -
Composite 组合
2009-02-23 23:45 831Composite 组合模式,将对象组合成树形结构以表示“部分 ... -
Decorator 装饰模式
2009-02-23 23:42 1251Decorator 装饰模式,对象 ... -
Bridge 桥接
2009-02-23 23:11 1090Bridge 桥接,对象结构型模式,将抽象部分与实 ... -
Adapter 适配器
2009-02-23 18:44 1066Adapter 适配器,类对象结构型模式,将一个类的接口转化为 ... -
Prototype 原型 Singleton单件
2009-02-23 14:43 1186Prototype 原型,创建型模式,用原型实例指定创建对象的 ... -
Factory Method 工厂方法
2009-02-23 14:09 1098Factory Method 工厂方法,创建型 模式,她定义一 ... -
Builder 模式
2009-02-23 13:54 1134Builder 模式,生成器,将一个复杂对象的构建鱼他的表示分 ...
相关推荐
设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx
FlyWeight享元 --- 对象结构型模式
C#面向对象设计模式纵横谈(12):Flyweight 享元模式(结构型模式) (Level 300)
C#面向对象设计模式纵横谈(12):Flyweight 享元模式(结构型模式)
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第12节:结构型模式Flyweight享元模式
主要介绍了C++设计模式编程的Flyweight享元模式结构,享元模式在实现过程中主要是要为共享对象提供一个存放的"仓库"(对象池),需要的朋友可以参考下
主要介绍了Java设计模式编程中的Flyweight享元模式的开发结构,享元模式能够最大限度地重用现有的同类对象,需要的朋友可以参考下
比如包括了工厂模式、Bridge桥接模式、Builder构建模式、Facade外观模式、Adapter适配器模式,Composite组合模式、Decorator装饰器模式,FactoryMethod工厂方法模式、Flyweight享元模式,Interpreter解释器模式,...
C++设计模式课件13_Flyweight_享元模式.pdf
设计模式(C#)之享元模式(Flyweight Pattern),运用共享技术有效地支持大量细粒度的对象。
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/1033359
6、Flyweight 享元模式 7、Proxy 代理模式 11个行为模式: 1、Chain of Responsibility 职责链 2、Command 命令 3、Interpreter 解释器 4、Iterator 迭代器 5、Mediator 中介者 6、Memento 备忘录 7、...
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
享元模式英文称为“Flyweight Pattern”,我非常感谢将Flyweight Pattern翻译成享元模式的那位强人,因为这个词将这个模式使用的方式明白得表示了出来;如果翻译成为羽量级模式或者蝇量级模式等等,虽然可以含蓄的...
主要为大家详细介绍了C++设计模式之享元模式Flyweight,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
3.6 FLYWEIGHT 享元模式 49 3.7 PROXY 代理模式 53 行为模式 57 4.1 CHAIN OF RESPONSIBILITY 职责链模式 57 4.2 COMMAND 命令模式 61 4.3 INTERPRETER 解释器模式 66 4.4 MEDIATOR 中介者模式 71 4.5 ITERATOR 迭代...
在享元模式中可以共享的相同内容称为内部状态(Intrinsic State),而那些需要外部...在享元模式中通常会出现工厂模式,需要创建一个享元工厂来负责维护一个享元池(Flyweight Pool)用于存储具有相同内部状态的享元对象。
com.javapatterns.flyweight 享元模式 com.javapatterns.immutable 不变模式 com.javapatterns.interfaces Java接口 com.javapatterns.interpreter 解释器模式 com.javapatterns.isp 接口隔离原则 ...