意图:动态的给一个对象添加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更为灵活。
别名:Wrapper
结构图如下:
Decorator维持一个指向Component对象的引用,并定义一个与Component接口一致的接口。
ConcreteDecorator则是负责向ConcreteComponent添加职责的类
Decorator将Operation()请求转发给它的Component对象,并有可能在转发请求前后执行一些附加的操作。
示例代码如下
public abstract class Component {
public abstract void Operation();
}
public class Decorator extends Component {
protected Component component;
@Override
public void Operation() {
// TODO Auto-generated method stub
if (component != null) {
component.Operation();
}
}
public void Decorate(Component component) {
this.component = component;
}
}
public class ConcreteComponent extends Component {
@Override
public void Operation() {
// TODO Auto-generated method stub
System.out.println("ConcreteComponent Operation");
}
}
public class ConcreteDecoratorA extends Decorator {
private String addedState;
@Override
public void Operation() {
super.Operation();
addedState = "Add a New State";
System.out.println("ConcreteDecoratorA Decorate Operation");
}
}
public class ConcreteDecoratorB extends Decorator {
@Override
public void Operation() {
super.Operation();
AddedBehavior();
System.out.println("ConcreteDecoratorB Decorate operation");
}
private void AddedBehavior() {
System.out.println("ConcreteDecoratorB private behavior");
}
}
客户端使用
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
ConcreteComponent obj = new ConcreteComponent();
ConcreteDecoratorA da = new ConcreteDecoratorA();
ConcreteDecoratorB db = new ConcreteDecoratorB();
System.out.println("Decorate obj");
da.Decorate(obj);
db.Decorate(da);
db.Operation();
}
}
运行结果
Decorate obj
ConcreteComponent Operation
ConcreteDecoratorA Decorate Operation
ConcreteDecoratorB private behavior
ConcreteDecoratorB Decorate operation
总结
1. 装饰模式符合开-闭原则,如果需要增加新的功能,只需要增加一个ConcreteDecoratorC等等,不需要修改其它的类,只要在客户端实例化一个ConcreteDecoratorC对象即可
ConcreteDecoratorC dc = new ConcreteDecoratorC();
dc.Decorate(db);
dc.Operation();
2. 调整ConcreteDecorator中Operation实现时父类Operation与子类操作的顺序,可以调整装饰的操作顺序
public class ConcreteDecoratorA extends Decorator {
private String addedState;
@Override
public void Operation() {
addedState = "Add a New State";
System.out.println("ConcreteDecoratorA Decorate Operation");
super.Operation();
}
}
public class ConcreteDecoratorB extends Decorator {
@Override
public void Operation() {
AddedBehavior();
System.out.println("ConcreteDecoratorB Decorate operation");
super.Operation();
}
private void AddedBehavior() {
System.out.println("ConcreteDecoratorB private behavior");
}
}
运行结果
Decorate obj
ConcreteDecoratorB private behavior
ConcreteDecoratorB Decorate operation
ConcreteDecoratorA Decorate Operation
ConcreteComponent Operation
- 大小: 23.8 KB
分享到:
相关推荐
装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...
装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象接口的情况下,动态地为对象添加额外的职责或功能。装饰模式通常用于需要扩展对象功能而又不希望使用子类化的场景。 装饰模式的组成 组件接口...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...
装饰模式(Decorator)是软件设计领域中一种非常实用的结构型设计模式,它允许我们向一个对象添加新的行为或责任,而无需修改该对象的源代码。在C++编程语言中,装饰模式常用于动态地扩展类的功能,使得类的行为在...
装饰者模式(Decorator)是一种设计模式,用于在运行时动态地给对象添加额外的责任或功能。它是结构型设计模式的一种,能将行为的增加与对象的创建分离,使得我们可以独立地扩展对象的功能。 在Java或其他面向对象...
装饰模式(Decorator)是软件设计模式中的一种结构型模式,其主要目的是在不改变对象原有类的基础上,通过添加新的行为或职责来扩展对象的功能。这种模式使得代码的扩展性非常优秀,避免了由于频繁地使用继承而导致...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它允许在运行时给对象添加新的行为或职责,而无需改变对象的类。在Java中,装饰模式通常通过继承和组合来实现,使得代码具有更好的扩展性和灵活性。...
装饰器模式(Decorator)是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式属于结构型模式,是面向对象设计中的一种非常实用的技术。 装饰器模式的核心思想是通过将一个...
装饰器模式(Decorator Pattern)是一种结构型设计模式,主要用于在运行时动态地给对象添加新的职责或行为,而不必改变现有对象的类定义。在面向对象编程中,装饰器模式提供了一种相对于继承更加灵活的方式来增强或...
装饰模式(Decorator Pattern)是一种结构型设计模式,它允许你向一个现有的对象添加新的功能,同时又不改变其结构。装饰模式通过创建一个装饰类,该类包装了原始类的实例,并在调用原始类方法之前或之后添加额外的...
13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21...
装饰器(Decorator)模式 装饰器(Decorator)模式是一种典型的结构型模式,主要用意是动态地为对象添加一些额外的功能。它提供了一个灵活的替代方案来继承子类,以扩展对象的功能。 在《Element of Reusable ...
装饰模式是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式在不违背开闭原则(对扩展开放,对修改关闭)的前提下,提供了灵活的扩展机制。装饰模式通常用于为已有对象添加...
装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。这个模式的名字来源于装饰艺术,它通过添加额外的装饰来增强一个物体的外观,同样地,...
装饰模式是一种设计模式,属于结构型模式,其主要目的是在不改变对象本身的基础上,通过向对象添加新的行为或属性来扩展其功能。这种模式遵循“开闭原则”,即对扩展开放,对修改关闭。 在装饰模式中,有四个关键...
【Decorator模式】是一种设计模式,它允许在运行时动态地给对象...在实际的软件开发中,Decorator模式同样适用于那些需要动态增减功能的对象,例如在UI设计中添加装饰元素,或者在数据库连接池中添加不同的连接策略等。
Decorator模式,也称为装饰模式,是设计模式中的一个重要组成部分,它在不改变原有对象接口的前提下,动态地给对象添加新的功能,从而扩展了对象的能力。这篇博客()将深入探讨这个模式的细节。 装饰模式的核心...
在装饰者模式中,我们通常有两个主要的角色:Component(组件)和Decorator(装饰器)。Component是被装饰的对象接口,定义了所有装饰器和原始对象共同拥有的行为。Concrete Component是Component的具体实现,是实际...