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> |