装饰者模式:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
装饰者模式的特点:
装饰者模式的适用范围:
1 interface Work{ 2 3 public void work(); 4 } 5 6 class Son implements Work{ 7 @Override 8 public void work() { 9 System.out.println("画画..."); 10 } 11 } 12 13 class Mather implements Work{ 14 15 //需要被增强的类。 16 Work worker; 17 18 public Mather(Work worker){ 19 this.worker = worker; 20 } 21 22 @Override 23 public void work() { 24 worker.work(); 25 System.out.println("给画上颜色.."); 26 } 27 } 28 29 30 class Father implements Work{ 31 32 //需要被增强的类的引用 33 Work worker; 34 public Father(Work worker){ 35 this.worker = worker; 36 } 37 38 @Override 39 public void work() { 40 worker.work(); 41 System.out.println("上画框..."); 42 } 43 } 44 45 46 public class Demo3 { 47 48 public static void main(String[] args) { 49 Son s = new Son(); 50 // s.work(); 51 Mather m = new Mather(s); 52 // m.work(); 53 Father f = new Father(m); 54 f.work(); 55 } 56 }
装饰者模式和继承都可以扩展原有类的功能。那么两者有什么优缺点呢:
继承实现的增强类:
优点:代码结构清晰,而且实现简单
缺点:对于每一个的需要增强的类都要创建具体的子类来帮助其增强,这样会导致继承体系过于庞大。
修饰模式实现的增强类:
优点:内部可以通过多态技术对多个需要增强的类进行增强
缺点:需要内部通过多态技术维护需要增强的类的实例。进而使得代码稍微复杂。
原文:http://www.cnblogs.com/nicker/p/6250313.html