
定义一个接口
1 package com.test.patten.decorator; 2 3 public interface Person { 4 void doCoding(); 5 }定义使用者1 package com.test.patten.decorator; 2 3 public class Employee implements Person { 4 5 @Override 6 public void doCoding() { 7 System.out.println("程序员加班写程序啊,写程序,终于写完了。。。"); 8 } 9 10 }定义装饰抽象类1 package com.test.patten.decorator; 2 3 public abstract class Manager implements Person{ 4 5 //装饰器增加功能 6 public abstract void doCoding(); 7 8 }
定义具体继承类并且封装业务在里面
1 package com.test.patten.decorator; 2 3 public class ManagerA extends Manager { 4 private Person person;//给雇员升职 5 6 public ManagerA(Person person) { 7 super(); 8 this.person = person; 9 } 10 @Override 11 public void doCoding() { 12 doEarlyWork(); 13 person.doCoding(); 14 } 15 /** 16 * 项目经理开始前期准备工作 17 */ 18 public void doEarlyWork() { 19 System.out.println("项目经理A做需求分析"); 20 System.out.println("项目经理A做架构设计"); 21 System.out.println("项目经理A做详细设计"); 22 } 23 }1 package com.test.patten.decorator; 2 3 public class ManagerB extends Manager { 4 private Person person;//给雇员升职 5 6 public ManagerB(Person person) { 7 super(); 8 this.person = person; 9 } 10 @Override 11 public void doCoding() { 12 person.doCoding(); 13 doEndWork(); 14 } 15 /** 16 * 项目经理开始项目收尾工作 17 */ 18 public void doEndWork() { 19 System.out.println("项目经理B 在做收尾工作"); 20 } 21 22 }根据需要调用具体的实现类1 package com.test.patten.decorator; 2 3 public class Client { 4 public static void main(String args[]){ 5 Person employee = new Employee(); 6 employee = new ManagerA(employee);//赋予程序猿项目经理A职责 7 employee = new ManagerB(employee);//赋予程序猿项目经理B职责 8 9 employee.doCoding(); 10 } 11 }