此文章问转载
decorator 模式的功能是:给一个对象添加一些额外的职责(操作),虽然此功能可以用继承实现,但装饰模式比生成子类更灵活些。
装饰的意思:就是包装一下。把另的对象包装一下。我这里只简单示例下怎么使用。
业务接口 Component:
package com.chenlb.dp.decorator;
/**
* 业务接口
*/
public interface Component {
void operation();
}
具体业务 ConcreteComponent:
package com.chenlb.dp.decorator;
/**
* 具体业务类.
*/
public class ConcreteComponent implements Component {
public void operation() {
System.out.println("I'm "+this.getClass().getName());
}
}
装饰 Decorator:
package com.chenlb.dp.decorator;
/**
* 装饰类.
*/
public class Decorator implements Component {
private Component component;
public Decorator(Component component) {
this.component = component;
}
public void operation() {
component.operation();
}
}
执行前装饰 BeforeDecorator:
package com.chenlb.dp.decorator;
/**
* 在业务执行前加点额外的操作.
*/
public class BeforeDecorator extends Decorator {
public BeforeDecorator(Component component) {
super(component);
}
public void operation() {
before();
super.operation();
}
private void before() {
System.out.println("before: I'm "+this.getClass().getName());
}
}
执行后装饰 AfterDecorator:
package com.chenlb.dp.decorator;
/**
* 在业务执行完后添加额外的操作.
*/
public class AfterDecorator extends Decorator {
public AfterDecorator(Component component) {
super(component);
}
public void operation() {
super.operation();
after();
}
private void after() {
System.out.println("after: I'm "+this.getClass().getName());
}
}
运行示例 Demo:
package com.chenlb.dp.decorator;
public class Demo {
public static void main(String[] args) {
Component component = new ConcreteComponent();
component.operation();
System.out.println("----------------------------------------");
component = new BeforeDecorator(new ConcreteComponent());
component.operation();
System.out.println("----------------------------------------");
component = new AfterDecorator(new ConcreteComponent());
component.operation();
System.out.println("----------------------------------------");
component = new AfterDecorator(new BeforeDecorator(new ConcreteComponent()));
component.operation();
System.out.println("----------------------------------------");
component = new BeforeDecorator(new AfterDecorator(new ConcreteComponent()));
component.operation();
}
}
分享到:
相关推荐
JAVA-设计模式-结构型模式-装饰模式
7. **装饰器模式(Decorator Pattern)**:动态地给一个对象添加一些额外的职责,提供了比继承更灵活的扩展对象功能的方式。 8. **代理模式(Proxy Pattern)**:为其他对象提供一种代理以控制对这个对象的访问,...
- 装饰模式:动态地给一个对象添加一些额外的职责。 - 复用模式(享元模式):运用共享技术有效地支持大量细粒度的对象。 3. 行为型模式: - 责任链模式:避免将处理请求的发送者和接收者耦合在一起,将多个对象...
计算机后端-Java-图解java设计模式072 装饰者模式(2)-.avi
计算机后端-Java-图解java设计模式074 装饰者模式(4)-.avi
计算机后端-Java-图解java设计模式071 装饰者模式(1)-.avi
装饰工程-装饰工程系统-装饰工程系统源码-装饰工程管理系统-装饰工程管理系统java代码-装饰工程系统设计与实现-基于springboot的装饰工程系统-基于Web的装饰工程系统设计与实现-装饰工程网站-装饰工程网站代码-装饰...
装饰工程-装饰工程系统-装饰工程系统源码-装饰工程管理系统-装饰工程管理系统java代码-装饰工程系统设计与实现-基于springboot的装饰工程系统-基于Web的装饰工程系统设计与实现-装饰工程网站-装饰工程网站代码-装饰...
计算机后端-Java-图解java设计模式073 装饰者模式(3).avi
计算机后端-Java-图解java设计模式075 装饰者模式(5).avi
计算机后端-Java-图解java设计模式076 装饰者模式(6).avi
本章可以称为“给爱用继承的人一个全新的设计眼界”。我们即将再度探讨典型滥用问题。你将在本章学到如何使用对象组合的方式,做到在运行时装饰类。为什么呢?一旦你熟悉了装饰者的技巧...——《Head First 设计模式》
装饰工程管理系统-装饰工程管理系统的设计与实现代码-java-springboot-基于springboot的装饰工程管理系统项目-代码-源码-项目-系统-毕设-网站 1、技术栈:java,springboot,vue,ajax,maven,mysql,MyBatisPlus等 ...
### 后端-设计模式-java-精讲 #### 一、设计模式概述 设计模式是在软件工程领域中,为了应对特定的问题或需求而形成的最佳实践的解决方案。它们为解决常见问题提供了一种标准的方法,有助于提高代码的复用性、...
代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法...装饰模式(Decorator Pattern)、迭代器模式(Iterator Pattern)、组合模式(Composite Pattern)、观察者模式(Observer Pattern)、责任链...
- **常见设计模式**:单例、工厂、观察者、装饰器、代理、适配器等23种设计模式的应用场景和实现方式。 6. **Git基础** - **版本控制**:理解Git的版本控制理念,如commit、branch、merge、rebase等操作。 - **...