设计模式之装饰者模式(Decorator)
来源:互联网 发布:歧视 知乎 编辑:程序博客网 时间:2024/06/15 22:33
装饰者模式(Decorator)动态地扩展一个对象的功能而不必改变源类文件和使用继承。它的设计原则是:多用组合,少用继承。
装饰者模式的优点
- 装饰者模式与继承关系的目的都是要扩展对象的功能,继承是静态的,它在系统运行前就决定了。装饰者更加灵活。
- 通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合。
在装饰模式中的各个角色
- 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象;
- 具体构件(Concrete Component)角色:定义一个将要接收附加责任的类;
- 装饰(Decorator)角色:持有一个构件(Component)对象的实例,并实现一个与抽象构件接口一致的接口;
- 具体装饰(Concrete Decorator)角色:负责给构件对象添加上附加的责任。
抽象构件:
/** * 一个接口,定义需要扩展的功能 */public interface IComponent{ public void exampleFun();}
具体构件:
/** * 接口的具体实现类 */public class ConcreteComponent implements IComponent{ @Override public void exampleFun() { System.out.println("This is exampleFun!"); }}
装饰角色:
/** * 装饰角色,包含一个IComponent对象实例,并实现一个与接口一致的方法。 * 可以传入相同类型的不同的实例来改变功能。 */public class Decorator implements IComponent{ private IComponent mComponent = null; public Decorator(IComponent component) { mComponent = component; } @Override public void exampleFun() { mComponent.exampleFun(); }}
具体装饰角色:
/** * 具体装饰角色,负责给构件对象添加上附加的责任 */public class ConcreteDecorator extends Decorator{ public ConcreteDecorator(IComponent component) { super(component); } @Override public void exampleFun() { super.exampleFun(); // 附加的相关功能 System.out.println("Doing other things in ConcreteDecorator..."); } public void otherFun() { }}
public static void main(String[] args) { IComponent component = new ConcreteComponent(); ConcreteDecorator decorator = new ConcreteDecorator(component); decorator.exampleFun(); }
结果:
This is exampleFun!Doing other things in ConcreteDecorator...
大家会发现装饰者模式和对象的适配器模式有点类似。适配器的主要目的是将一个类的接口转换成客户希望的另外一个接口,在转换时也可以增加新的职责,但主要目的不在此。装饰者模式主要是给被装饰者增加新职责的。
0 0
- 设计模式之Decorator(装饰者)
- 设计模式之Decorator(装饰者模式)
- 设计模式之(Decorator)装饰者模式
- 设计模式之装饰者模式(Decorator)
- 设计模式之装饰者模式Decorator
- 【设计模式】之装饰模式(Decorator)
- 设计模式之装饰模式(Decorator)
- 设计模式之 装饰模式(Decorator)
- 设计模式之装饰模式(Decorator)
- 设计模式之装饰(Decorator)模式
- 设计模式之装饰模式(Decorator)
- 设计模式之装饰模式(Decorator)
- 设计模式笔记之装饰者模式(Decorator Pattern)
- 设计模式之——装饰者模式(Decorator)
- 设计模式之装饰者模式(Decorator)
- C#设计模式之装饰者模式(Decorator Pattern)
- 设计模式之装饰者模式(Decorator)
- javascript设计模式之Decorator(装饰者)模式
- Github 博客平台搭建
- IP数据报的分片与重组分析
- 邻接表的基本操作(无向网)
- Android图片相关学习
- Adapter的arrayladapter和simpleadapter使用
- 设计模式之装饰者模式(Decorator)
- 深入理解openstack网络架构(2)----Basic Use Cases
- [Objective-C] 2014.11.28
- 用Qt设计一个属于自己的图标按钮
- Mac下Xcode(4.6.1)配置Opencv(2.4.9)
- sql 2000 "无法执行查询,因为一些文件缺少或未注册"的
- 1037. Magic Coupon (25)
- 边记边学PHP-(九)PHP字符串常用函数及内容分页实现
- HTML中id,name,value的认识