装饰模式(Decorator Pattern):动态地给一个对象增加一些额外的职责。就是增加功能,装饰模式相比生成子类更加灵活。
继承与装饰模式比较:继承是静态给类增加功能,而装饰者是动态给类增加功能。
优点:
a. 装饰类和被装饰类互不耦合。
b. 装饰模式是一种继承关系的替代,不管装饰多少层,最终返回的对象都是一个Component,实现的还是is-a的关系。
c. 装饰模式可以动态扩展一个实现类的功能。
缺点:
多层装饰比较复杂,减少装饰类的数量,降低系统复杂度。
使用场景:
a. 扩展一个类的功能,或者给一个类增加附加的功能。
b. 动态给一个对象增加功能,这些功能能够动态撤销。
c. 为一批兄弟类改装或者加装功能。
实现的核心:继承和聚集,即Decorator继承一个最基本,最核心,最原始的接口或者抽象类Component,同时在Decorator类中又包含一个私有的Component类。
package org.decorator;
public abstract class Component {
// 创建被装饰类
// 抽象的方法
public abstract void operate();
}
package org.decorator;
public class ConcreteComponent extends Component {
// 具体实现
@Override
public void operate() {
System.out.println("do Something");
}
}
package org.decorator;
public class Decorator extends Component {
private Component component = null;
// 通过构造参数传递被装饰者
public Decorator(Component _component) {
// TODO Auto-generated constructor stub
this.component = _component;
}
// 委托被装饰者执行行
@Override
public void operate() {
// TODO Auto-generated method stub
this.component.operate();
}
}
package org.decorator;
public class ConcreteDecorator1 extends Decorator {
// 定义被装饰者
public ConcreteDecorator1(Component _component) {
super(_component);
}
// 定义自己的修饰方法
public void method1(){
System.out.println("method1 修饰");
}
// 重写父类的operate方法
@Override
public void operate() {
// TODO Auto-generated method stub
this.method1();
super.operate();
}
}
package org.decorator;
public class ConcreteDecorator2 extends Decorator{
// 定义被装饰者
public ConcreteDecorator2(Component _component) {
super(_component);
}
// 定义自己的修饰方法
public void method2() {
System.out.println("method2 修饰");
}
// 重写父类的operate方法
@Override
public void operate() {
// TODO Auto-generated method stub
this.method2();
super.operate();
}
}
package org.decorator;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
Component component = new ConcreteComponent();
component = new ConcreteDecorator1(component);
component = new ConcreteDecorator2(component);
component.operate();
}
}
- 大小: 32.5 KB
分享到:
相关推荐
动态地给一个对象添加一些额外的职责。就扩展功能而言,它比生成子类方式更为灵活。
13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21...
装饰者模式(Decorator Pattern)是一种结构型设计模式,它的定义是在不改变原有对象结构的基础上,动态地给该对象增加一些职责(即增加其额外功能)。这种模式允许向一个现有的对象添加新的功能,同时又不改变其...
Head First 设计模式 (三) 装饰者模式(decorator pattern) C++实现 VS2012 下通过
主要为大家详细介绍了java装饰模式Decorator Pattern,这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装,对装饰器模式感兴趣的小伙伴们可以参考一下
主要介绍了java 装饰模式(Decorator Pattern)详解的相关资料,需要的朋友可以参考下
主要为大家详细介绍了java实现装饰器模式Decorator Pattern,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装
主要介绍了C#装饰器模式(Decorator Pattern),以一个完整实例形式讲述了C#装饰器模式的实现过程,有助于深入理解C#程序设计思想,需要的朋友可以参考下
在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特质,使得这种扩展方式...[GOF《设计模式》]图1Decorator模式结构图装饰模式动态地给一个对象添加额外的职责。不论一幅画有没有画
备忘录模式(Memento Pattern) 策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) ...装饰模式(Decorator Pattern) 状态模式(State Pattern) 组合模式(Composite Pattern)
设计模式—装饰者模式,实例代码演示,设计模式—装饰者模式,实例代码演示设计模式—装饰者模式,实例代码演示,
内含装饰器模式的简单案例demo和用mindmaster绘制的脑图,方便java入门开发者进行java开发模式的学习。
装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令...
这是一个关于设计模式中的装饰者模式例子,C#,Vs205,Unity 5.6.3f1 (64-bit)有需要的请下载!本来不想设置积分,可是最低1分,没办法!
装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3. 行为型模式 责任链模式(Chain of Responsibility Pattern) 命令模式(Command ...
装饰者模式C++实现,简单示例
装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令...
8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型 13. 模板方法(Template Method) ...