Java装饰设计模式

来源:互联网 发布:nginx 禁止某ip访问 编辑:程序博客网 时间:2024/05/21 19:29

1、 理解生活的装饰

生活中一些人、事、物,经过一些点缀,看起来,发生了一些改变,这些改变称为装饰,原有事物的本质内容没有发生改变。

2、         java装饰设计模式的含意

一个工作任务,经过一些点缀,表面上看起来发生一些改变,这每一次改变,就是一次装饰,这种设计方式就装饰设计模式。

例如

一行文字,可以有N多种装饰

加下划线

加粗

斜体

。。。

 

3、         编程要点

1)     写一个工作任务,2个类文件

一个接口

一个接口的实现子类

2)     写一个抽象装饰类

这是一个代理设计模式

3)     写具体装饰类

有几次装饰,就写几个类

 

4、         示例代码

工作任务类,2个文件

public interface ITask {

   void print();

 

}

public class ImplTask implements ITask{

   public ImplTask() {

      Log.getLog().info("this="+this);

   }

 

   @Override

   public void print() {

      System.out.println("<div>这是原始网页文本输出</div>");

     

   }

 

}

抽象装饰类,1个文件

public abstract class AbsTask implements ITask{

   private ITask task;

  

   public AbsTask(ITask task) {

      this.task=task;

   }

   @Override

   public void print() {

      task.print();  //这是一个代理设计模式

     

   }

 

}

 

具体装饰类,多个文件,每一次装饰多一个文件

public class Concret_Decorator_1 extends AbsTaskimplements ITask{

 

   public Concret_Decorator_1(ITask task) {

      super(task);

   }

   @Override

   public void print() {

      System.out.println("<b>");

      super.print(); //原有工作不变,在此加粗字体

      System.out.println("</b>");

   }

 

}

public class Concret_Decorator_2 extends AbsTaskimplements ITask{

 

   public Concret_Decorator_2(ITask task) {

      super(task);

   }

   @Override

   public void print() {

      System.out.println("<u>");

      super.print(); //原有工作不变,在此加:下划线

      System.out.println("</u>");

   }

 

}

public class Concret_Decorator_3 extends AbsTaskimplements ITask{

 

   public Concret_Decorator_3(ITask task) {

      super(task);

   }

   @Override

   public void print() {

      System.out.println("<b>");

      super.print(); //原有工作不变,在此加:斜体

      System.out.println("</b>");

   }

 

}

 

检测类,1个文件

public class TestDecorator {

 

   /**

    * @param args

    */

   public static void main(String[] args) {

      //构建原始工作任务

      ITask task=new ImplTask();

      task.print();

      //执行第1次装饰

      System.out.println("1次装饰的效果");

      ITask dec1=new Concret_Decorator_1(task);

      dec1.print();

      //执行第2次装饰

      System.out.println("2次装饰的效果");

      ITask dec2=new Concret_Decorator_2(dec1);

      dec2.print();

      //执行第3次装饰

      System.out.println("3次装饰的效果");

      ITask dec3=new Concret_Decorator_3(dec2);

      dec3.print();

 

   }

 

}

 

 

5、         处理效果

iss.pattern.decorator.ImplTask.<init>(ImplTask.java:14)11-27 16:45:07>

this=iss.pattern.decorator.ImplTask@1ebdb06

 

 <div>这是原始网页文本输出</div>

第1次装饰的效果

<b>

<div>这是原始网页文本输出</div>

</b>

第2次装饰的效果

<u>

<b>

<div>这是原始网页文本输出</div>

</b>

</u>

第3次装饰的效果

<b>

<u>

<b>

<div>这是原始网页文本输出</div>

</b>

</u>

</b>