java设计模式之装饰者模式

         程序设计时,有一条重要的准则,就是合成/聚合复用,根据该原则的思想,代码复用应该尽可能使用委托,而少用继承.继承是一种紧密耦合的的类关系.任何父类的改动都会影响其子类,因而不利于系统维护.而委托是一种松散耦合,只要接口不变,委托类的改动,并不会改动其上层对象.

   装饰着模式就充分利用了这一点,通过委托机制,复用系统的各个组件,可以将这些组建任意组合成所需的对象,而各个子功能模块被维护在相关的各个类中.

   装饰者模式的基本结构如图:

 

     装饰者(decorator)和被装饰者(concreteCompnen)实现了共同的接口(component),被装饰者是核心组件,而装饰者则在被装饰者前后加上相应的处理,增强被装饰者的功能.

比如,我有一个打印的方法,现在想在原来的内容上加上一个前置内容,如题代码设计如下.

     首先,设计的接口 IPrint:

package com.tzl.model.decorator;

public interface IPrint {
public String print();
}

 然后,是原有的打印程序:

    

package com.tzl.model.decorator;

 


public class PrintImpl implements IPrint {

 @Override
 public String print() {
  // TODO Auto-generated method stub
  System.out.println("我是原有的内容");
  return "我是原有的内容";
 }

 

}

 

  设计的抽象类PrintAbstract用来维护原有组件,并告子其子类,其核心业务应全委托给PrintImpl,代码实现:

package com.tzl.model.decorator;

public abstract class PrintAbstract implements IPrint{
  IPrint iPrint;
 public PrintAbstract(IPrint iPrint){
  this.iPrint=iPrint;
 }
}

 最后,是 具体装饰器DecoratorPrint:

package com.tzl.model.decorator;

public class DecoratorPrint extends PrintAbstract{
  public DecoratorPrint(IPrint iPrint){
   super(iPrint);
  }
 @Override
 public String print() {
  // TODO Auto-generated method stub
  System.out.println("代理完成");
  System.out.println("我是被加的内容"+iPrint.print());
  return "我是被加的内容"+iPrint.print();
 }

}

 测试代码如下:

package com.tzl.model.decorator;

public class TestDecorator {
public static void main(String[] args) {
 PrintImpl printImpl=new PrintImpl();
 IPrint print=new DecoratorPrint(printImpl);
 print.print();
 
}
}

 打印结果:

   


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值