装饰模式(Decorator Pattern)

本文介绍装饰模式,一种通过包装对象来扩展其功能的设计模式。它提供了一种替代继承的方法,允许在运行时动态地给对象添加职责。文中给出了装饰模式的基本结构、Java实现代码示例及其适用场景。

    装饰模式又名包装(Wrapper)模式。装饰模式以对客户透明的方式扩展对象的功能,是继承关系的一个替代方案。
类图:

装饰模式(Decorator <wbr>Pattern)

示例:
装饰模式使用原来被装饰的类的一个子类的实例,把客户端的调用委派到被装饰类。装饰模式的关键在于这种扩展时完全透明的。
1、模式的结构:

装饰模式(Decorator <wbr>Pattern)
 

2、java代码
Component类:
package decorator;
public interface Component {
 public void sampleOperation();
}
 
ConcreteComponent类:
package decorator;
public class ConcreteComponent implements Component{
 
 public ConcreteComponent(){
  System.out.println("ConcreteComponent。。。。。。");
 }
 public void sampleOperation() {
  System.out.println("ConcreteComponent operate。。。。。。");
 }
}
 
 
Decorator类:
package decorator.decorator;
import decorator.Component;
public class Decorator implements Component{
 private Component component;
 public Decorator(Component c){
  super();
  component = c;
 }
 public Decorator(){
  System.out.println("Decorator。。。。。。");
 }
 public void sampleOperation() {
  component.sampleOperation();
 }
}
 

DecoratorComponent类:

 package decorator.decorator;
import decorator.Component;
public class ConcreteDecorator1 extends Decorator {
 
 public ConcreteDecorator1(){
  System.out.println("ConcreteDecorator1。。。。。。");
 }
 public ConcreteDecorator1(Component c){
  super(c);
 }
 public void sampleOperation() {
  super.sampleOperation();
  System.out.println("ConcreteDecorator1 operate。。。。。。");
 }
}
 
 
package decorator.decorator;
import decorator.Component;
public class ConcreteDecorator2 extends Decorator {
 
 public ConcreteDecorator2(){
  System.out.println("ConcreteDecorator2。。。。。。");
 }
 public ConcreteDecorator2(Component c){
  super(c);
 }
 public void sampleOperation() {
  super.sampleOperation();
  System.out.println("ConcreteDecorator2 operate。。。。。。");
 }
}
 

Client类:

package decorator;
import decorator.decorator.ConcreteDecorator1;
import decorator.decorator.ConcreteDecorator2;
public class Client {
 
 public static void main(String args[]){
  Component a = new ConcreteComponent();
  Component decorator1 = new ConcreteDecorator1(a);
  Component decorator2 = new ConcreteDecorator2(decorator1);
  decorator2.sampleOperation();
 }
}

 
装饰模式应当在什么情况下使用:
装饰模式(Decorator <wbr>Pattern)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值