Decorator Pattern(装饰模式)

摘要

A Decorator Pattern says that just "attach a flexible additional responsibilities to an object dynamically".java

装饰模式的含义就是:“动态地为对象添加一些附加的责任”。换句话说,Decorator模式使用组合而不是继承来在运行时扩展对象的功能。装饰模式也被称为Wrapper-包装器模式。它是继承的一种替代方案。app

装饰模式的优势

  • 提供了比静态继承更大的灵活性
  • 提供了对象更加灵活的扩展性,由于它是经过对新类编码进行扩展
  • 它更加的简单。由于它容许在目标类中开发一系列的功能方法来代替在所有的对象中硬编码对象的行为方式

 装饰模式使用的场景

  • 当须要透明的、动态的为一个对象增长某种服务而且不想影响其余对象的时候
  • 当想要添加某种服务到未来可能须要改变的对象上时
  • 经过子类扩展很难实现的时候

UMLide

 

code 1:Person.java测试

 1 package com.daike.decorator;  2 
 3 /**
 4  * 抽象构件角色 Person  5  * @author daike  6  *  7  */
 8 public interface Person {  9 
10     public void show (); 11 }

code 2:GenericPerson.javaflex

 1 package com.daike.decorator;  2 
 3 /**
 4  * 具体构件角色 GenericPerson  5  * @author daike  6  *  7  */
 8 public class GenericPerson implements Person{  9 
10  @Override 11     public void show() { 12         System.out.println("一个普通的人。"); 13  } 14 
15 }

code 3:Tearcher.javathis

 1 package com.daike.decorator;  2 
 3 /**
 4  * 具体装饰角色 Tearcher  5  * @author daike  6  *  7  */
 8 public class Tearcher extends Decorator{  9     public Tearcher () {} 10     public Tearcher (Person per) { 11         super(per); 12  } 13     
14  @Override 15     public void show() { 16         super.show(); 17         System.out.println("我仍是一个很厉害的老师!"); 18  } 19 }

code 3:Decorator.java编码

 1 package com.daike.decorator;  2 
 3 /**
 4  * 装饰角色 Decorator  5  * @author daike  6  *  7  */
 8 public class Decorator implements Person {  9     private Person per; 10 
11     public Decorator() {} 12 
13     public Decorator (Person per) { 14         this.per = per; 15  } 16  @Override 17     public void show() { 18  per.show(); 19  } 20 
21 }

code 4:SuperMan.javaspa

 1 package com.daike.decorator;  2 
 3 /**
 4  * 具体装饰角色 SuperMan  5  * @author daike  6  *  7  */
 8 public class SuperMan extends Decorator{  9 
10     public SuperMan () {} 11     public SuperMan (Person per) { 12         super(per); 13  } 14  @Override 15     public void show() { 16         super.show(); 17         System.out.println("我仍是厉害的超人!"); 18  } 19 }

code 5:DecoratorTestDriver.javacode

 1 package com.daike.decorator;  2 
 3 /**
 4  * 测试类  5  * @author diake  6  *  7  */
 8 public class DecoratorTestDriver {  9 
10     public static void main (String[] args) { 11         Person per = new GenericPerson(); 12         Decorator teacher = new Tearcher(per); 13         Decorator superMan = new SuperMan(teacher); 14         //第一次装饰
15         System.out.println("-------------第一次装饰-----------------"); 16  teacher.show(); 17         //第一次装饰
18         System.out.println("-------------第二次装饰-----------------"); 19  superMan.show(); 20  } 21 }

 运行结果:对象

 

相关文章
相关标签/搜索