定义
动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。
能够解决什么问题
已经开发完毕的对象,后期由于业务需要,对旧的对象需要扩展特别多的功能,这时候使用给对象动态地添加新的状态或者行为(即装饰模式)方法,而不是使用子类静态继承。
优点
把类中的装饰功能从类中搬移出去,这样可以简化原有的类。有效地把类的核心功能和装饰功能区分开了
模式结构
Component: 定义了一个对象接口,可以给这些对象动态地添加职责
ConcreteComponent:定义了一个具体的对象,可以给这个具体的对象添加职责(需要被装饰的对象)
Decorator:抽象装饰类,继承了Component对象接口,从外类扩展Component类的功能,但对于Component来说,是无需知道Decorator的存在
ConcreteDecoratorA:具体的装饰对象,起到给Component添加职责的功能
ConcreteDecoratorB:具体的装饰对象,起到给Component添加职责的功能
源代码
public interface Component {
void operator();
}
public class ConcreteComponent implements Component {
/**
* 装饰该方法,在此方法执行前后增加操作,前后操作可分离
*/
@Override
public void operator() {
System.out.println("被装饰的方法");
}
}
/**
* 装饰基类
*
*
*/
public abstract class Decorator implements Component {
//被装饰对象
protected Component component;
public Decorator(){
}
public Decorator(Component component){
System.out.println("装饰基类带参数构造函数");
this.component=component;
}
@Override
public void operator() {
//执行被装饰对象方法
component.operator();
}
public Component getComponent() {
return component;
}
public void setComponent(Component component) {
this.component = component;
}
}
public class ConcreteDecoratorA extends Decorator {
public ConcreteDecoratorA(){
}
/**
* 构造器的继承,子类始终调用父类的缺省构造函数
* @param component
*/
public ConcreteDecoratorA(Component component){
this.component=component;
}
@Override
public void operator() {
add_A();
super.operator();
}
public void add_A(){
System.out.println("=======装饰前========");
}
}
public class ConcreteDecoratorB extends Decorator{
public ConcreteDecoratorB(){
}
public ConcreteDecoratorB(Component component){
this.component=component;
}
@Override
public void operator() {
super.operator();
add_B();
}
public void add_B(){
System.out.println("=======装饰后========");
}
}
public class Client {
public static void main(String[] args) {
Decorator ca=new ConcreteDecoratorA();
Decorator cb=new ConcreteDecoratorB();
Component component=new ConcreteComponent();
//new ConcreteDecoratorA(new ConcreteDecoratorB(new ConcreteComponent()));
cb.setComponent(component);
ca.setComponent(cb);
ca.operator();
}
}
分享到:
相关推荐
设计模式C++学习之装饰模式(Decorator)
动态地给一个对象添加一些额外的职责。就扩展功能而言,它比生成子类方式更为灵活。
C#设计模式之Decorator 装饰模式,pdf+视频教学,实例演示,易学易用~~
13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21...
学习java 装饰模式(decorator)非常好的例子
5、装饰模式(Decorator) 用意:动态地给一个对象增加其它职责,比继承实现灵活。
装饰者模式(Decorator Pattern)是一种结构型设计模式,它的定义是在不改变原有对象结构的基础上,动态地给该对象增加一些职责(即增加其额外功能)。这种模式允许向一个现有的对象添加新的功能,同时又不改变其...
装饰器(Decorator)模式 详细教程,简明易懂,非常清晰的,附带有代码示例。
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第10节:结构型模式Decorator装饰模式
C#面向对象设计模式 Decorator 装饰模式 视频讲座下载
主要为大家详细介绍了.net设计模式之装饰模式Decorator,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Head First 设计模式 (三) 装饰者模式(decorator pattern) C++实现 VS2012 下通过
装饰模式.doc 装饰模式.doc 装饰模式.doc
NULL 博文链接:https://chuanwang66.iteye.com/blog/1325151
NULL 博文链接:https://xiangtui.iteye.com/blog/1033790
主要介绍了Java设计模式之装饰模式(Decorator模式)介绍,本文讲解了为什么使用Decorator、如何使用装饰模式、Jive中的Decorator实现等内容,需要的朋友可以参考下
主要为大家详细介绍了C++设计模式之装饰模式Decorator的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
装饰模式的示例代码和文档,学习装饰模式的参考资料。
主要为大家详细介绍了java装饰模式Decorator Pattern,这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装,对装饰器模式感兴趣的小伙伴们可以参考一下
C#面向对象设计模式纵横谈(10):Decorator 装饰模式(结构型模式) (Level 300)