- 浏览: 390446 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
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 基础理论 / 概念
Decorator 装饰模式,对象结构模式,动态的给对象添加额外的职责。就增加功能而言,Decorator 比生成子类更为灵活。
Decorator 又叫wrapper,相当于在原来的物体上面又套了个东西,但是不改变原来的接口。它是对某个对象添加一些功能而不是整个类。比如一个文本套了个边框接口没变,然后又套了个滚动条,接口还是没有变。
Decorator 在actionscript设计模式有讲,他比静态的继承更为灵活、与它的compont不一样,是一个透明的包装可以很容易的添加一个特性。但是,采用Decotor会产生很多的类似的小对象,导致学习它很难,也很难排错。
使用Decorator要注意,接口的一致性,当你只要添加一个职责时,没有必要定义抽象Decorator类,保持装饰对象的简单性。当componen本身就很庞大时,使用Decorator的代价是很高的,strategy会好点。
装饰器模式采用的是组合而不是继承来给对象添加新的行为。
参与者:
Component,定义一对象的接口,可以给这个对象动态的添加职责。
ConcreteComponent,定义一对象,可以给这个对象动态的添加职责。
Decorator,维持一个指向Compoennt的对象引用,并定义一个和Components一致的接口。
ConcreteDecorator,向组件添加行为。
注意,Decorator是要和被装饰的对象有一致的接口的,和Proxy一样,而Adaptor是个接口转换器,两个接口并没有直接的联系。Composite也是一致的接口,他是强调单个和群体,有一致的接口。
下面来举个例子说明下,Decorator是怎么用的:
AdstractBasicShap .as package { import flash.display.*; public class AdstractBasicShap extends Sprite { public function AdstractBasicShap() { } } }
Cicle .as package { import flash.display.*; public class Cicle extends AdstractBasicShap { public function Cicle(radius:Number) { graphics.lineStyle(2,0,1); graphics.beginFill(0xFFFFFF,0.3); graphics.drawCircle(radius,radius,radius); graphics.endFill(); } } }
Rectangle.as package { import flash.display.*; public class Rectangle extends AdstractBasicShap { public function Rectangle(ShapeWidth:Number, shapHeight:Number, center:Boolean = false) { graphics.lineStyle(2,0,1); graphics.beginFill(0xFFFFFF,0.3); graphics.drawRect(center? - ShapeWidth/2:0,center?-shapHeight/2:0,ShapeWidth,shapHeight); graphics.endFill(); } } }
DraggableSahpe .as package { import flash.display.*; import flash.events.*; public class DraggableSahpe extends AdstractBasicShap { private var decorated:AdstractBasicShap; public function DraggableSahpe(decorated:AdstractBasicShap) { addChild(decorated); addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownHandler); addEventListener(MouseEvent.MOUSE_UP,onMouseUpHandler); } private function onMouseDownHandler(e:MouseEvent):void { startDrag(); } private function onMouseUpHandler(e:MouseEvent):void { stopDrag(); } } }
ColorableShape .as package { import flash.geom.*; public class ColorableShape extends AdstractBasicShap { public function ColorableShape(shape:AdstractBasicShap, red:uint,green:uint,blue:uint) { shape.transform.colorTransform = new ColorTransform(red,green,blue); addChild(shape); } } }
ResizeableShape .as package { import flash.events.*; public class ResizeableShape extends AdstractBasicShap { private var decorated:AdstractBasicShap; private var isResizing:Boolean; private var resizer:AdstractBasicShap; override public function set width(value:Number):void { decorated.width = value; resizer.x = value; } override public function set height(value:Number):void { decorated.height = value; resizer.y = value; } public function ResizeableShape(shape:AdstractBasicShap) { decorated = shape; addChild(decorated); resizer = new Rectangle(10,10,true); resizer = new ColorableShape(resizer,0.8,0.8,0.8); resizer.x = decorated.width; resizer.y = decorated.height; addChild(resizer); resizer.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownHandler); resizer.addEventListener(MouseEvent.MOUSE_UP,onMouseUpHandler); } private function onMouseDownHandler(e:MouseEvent):void { addEventListener(Event.ENTER_FRAME,onEnterframeHandler); resizer.startDrag(true); e.stopImmediatePropagation(); } private function onMouseUpHandler(e:MouseEvent):void { resizer.stopDrag(); removeEventListener(Event.ENTER_FRAME,onEnterframeHandler); } private function onEnterframeHandler(e:Event):void { if(resizer.x < 0) { resizer.x = 0; } if(resizer.y < 0) { resizer.y = 0; } decorated.width = resizer.x; decorated.height = resizer.y; } } }
发表评论
-
Visitor 访问者 行为模式
2009-02-25 00:55 1091Visitor 访问者 行为模式,表示一个作用于某个对象结构中 ... -
Template Method 模板方法 行为模式
2009-02-25 00:54 916Template Method 模板方法 行为模式,定义一个操 ... -
Strategy 策略 行为模式
2009-02-25 00:52 880Strategy 策略 行为模式,定义一系列的算法,把他们一个 ... -
State 状态 行为模式
2009-02-25 00:50 1112State 状态 行为模式,允许一个对象在其内部状态改变时改变 ... -
Observer 观察者 行为模式
2009-02-25 00:48 1636Observer 观察者 行为模式,定义对象的一对多的依赖关系 ... -
Memento 备忘录 行为模式
2009-02-25 00:46 1201Memento 备忘录 行为模式 ... -
Mediator 中介 行为模式
2009-02-25 00:44 1533Mediator 中介 行为 ... -
Iterator 迭代器 行为模式
2009-02-25 00:41 1892Iterator 迭代器 行为模式,提供一种顺序访问一个聚合对 ... -
Interpreter 解释器 行为模式
2009-02-25 00:40 894Interpreter 解释器 行为模式,给定一个语言,定义它 ... -
Command 命令 行为模式
2009-02-25 00:35 1365Command 命令 行为模式,将一个请求封装为一个对象 ... -
Chain of Responsibility 职责链 行为模式
2009-02-25 00:02 946Chain of Responsibility 职责链 行为模 ... -
Proxy 代理
2009-02-24 23:46 2023Proxy 代理,为其他对象提供一个代理以控制这个对象。 ... -
Flyweight (享元)
2009-02-24 17:56 1217Flyweight (享元)模式,是结构型模式,它是运用 ... -
Facade 外观
2009-02-24 15:00 1644Facade 外观,结构型模式,为子系统中的一组接口提供一个一 ... -
Composite 组合
2009-02-23 23:45 872Composite 组合模式,将对象组合成树形结构以表示“部分 ... -
Bridge 桥接
2009-02-23 23:11 1130Bridge 桥接,对象结构型模式,将抽象部分与实 ... -
Adapter 适配器
2009-02-23 18:44 1100Adapter 适配器,类对象结构型模式,将一个类的接口转化为 ... -
Prototype 原型 Singleton单件
2009-02-23 14:43 1215Prototype 原型,创建型模式,用原型实例指定创建对象的 ... -
Factory Method 工厂方法
2009-02-23 14:09 1128Factory Method 工厂方法,创建型 模式,她定义一 ... -
Builder 模式
2009-02-23 13:54 1166Builder 模式,生成器,将一个复杂对象的构建鱼他的表示分 ...
相关推荐
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...
### C#面向对象设计模式纵横谈(10):Decorator 装饰模式(结构型模式) #### 一、背景介绍 在面向对象编程中,设计模式是一种在特定情况下解决问题的标准化方法。其中,装饰模式(Decorator Pattern)作为结构型模式...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它允许在运行时给对象添加新的行为或职责,而无需改变对象的类。在Java中,装饰模式通常通过继承和组合来实现,使得代码具有更好的扩展性和灵活性。...
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第10节:结构型模式Decorator装饰模式
Decorator模式,也称为装饰模式,是设计模式中的一个重要组成部分,它在不改变原有对象接口的前提下,动态地给对象添加新的功能,从而扩展了对象的能力。这篇博客()将深入探讨这个模式的细节。 装饰模式的核心...
装饰模式是一种结构型设计模式,它允许我们向一个对象添加新的功能或增强现有功能,而无需改变该对象的类。在C#中,装饰模式通常通过继承和组合来实现,它提供了一种灵活的方式来动态地改变对象的行为。在这个“C#...
装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...
装饰器(Decorator)模式 装饰器(Decorator)模式是一种典型的结构型模式,主要用意是动态地为对象添加一些额外的功能。它提供了一个灵活的替代方案来继承子类,以扩展对象的功能。 在《Element of Reusable ...
在装饰者模式中,我们通常有两个主要的角色:Component(组件)和Decorator(装饰器)。Component是被装饰的对象接口,定义了所有装饰器和原始对象共同拥有的行为。Concrete Component是Component的具体实现,是实际...
装饰模式(Decorator)是软件设计领域中一种非常实用的结构型设计模式,它允许我们向一个对象添加新的行为或责任,而无需修改该对象的源代码。在C++编程语言中,装饰模式常用于动态地扩展类的功能,使得类的行为在...
装饰者模式(Decorator)是一种设计模式,用于在运行时动态地给对象添加额外的责任或功能。它是结构型设计模式的一种,能将行为的增加与对象的创建分离,使得我们可以独立地扩展对象的功能。 在Java或其他面向对象...
装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象接口的情况下,动态地为对象添加额外的职责或功能。装饰模式通常用于需要扩展对象功能而又不希望使用子类化的场景。 装饰模式的组成 组件接口...
【Decorator模式】是一种设计模式,它允许在运行时动态地给对象...在实际的软件开发中,Decorator模式同样适用于那些需要动态增减功能的对象,例如在UI设计中添加装饰元素,或者在数据库连接池中添加不同的连接策略等。
装饰器模式(Decorator)是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式属于结构型模式,是面向对象设计中的一种非常实用的技术。 装饰器模式的核心思想是通过将一个...
装饰模式是一种设计模式,属于结构型模式,其主要目的是在不改变对象本身的基础上,通过向对象添加新的行为或属性来扩展其功能。这种模式遵循“开闭原则”,即对扩展开放,对修改关闭。 在装饰模式中,有四个关键...
装饰模式(Decorator)是软件设计模式中的一种结构型模式,其主要目的是在不改变对象原有类的基础上,通过添加新的行为或职责来扩展对象的功能。这种模式使得代码的扩展性非常优秀,避免了由于频繁地使用继承而导致...