Java设计模式 装饰者模式
在Java中,需要给一个类扩充一个功能的方法很多,比如通过继承、实现接口等等,而本次介绍的是Java的一种设计模式,装饰者模式。
通过装饰者模式对一个类进行包装,再不需要对原有类进行修改的前提下,可以添加新的功能。
Base接口
下面定义了一个Base接口:
package com.lhy.csdn.base;
public interface IProgramer {
void program();
}
基础类
基础类Programer实现了IProgramer接口,主要的工作任务就是敲代码:
package com.lhy.csdn.impl;
import com.lhy.csdn.base.IProgramer;
public class Programer implements IProgramer {
@Override
public void program() {
// TODO Auto-generated method stub
System.out.println("普通的程序员:敲代码");
}
}
装饰后的类
装饰类1:TeamLeader,将IProgramer作为参数传递进来,对其进行了功能扩展,需要review code。
package com.lhy.csdn.impl;
import com.lhy.csdn.base.IProgramer;
public class TeamLeader implements IProgramer {
private IProgramer programer;
/**
* @param programer
*/
public TeamLeader(IProgramer programer) {
super();
this.programer = programer;
}
@Override
public void program() {
// TODO Auto-generated method stub
programer.program();
System.out.println("TeamLeader review 程序员的代码");
}
}
装饰类2:CTO,在TeamLeader的基础上,进行了再次包装,增加了功能:检查TeamLeader工作成果。
package com.lhy.csdn.impl;
import com.lhy.csdn.base.IProgramer;
public class CTO implements IProgramer {
private IProgramer programer;
/**
* @param programer
*/
public CTO(IProgramer programer) {
super();
this.programer = programer;
}
@Override
public void program() {
// TODO Auto-generated method stub
programer.program();
}
public void work() {
program();
System.out.println("CTO检查TeamLeader工作成果");
}
}
测试类
package com.lhy.csdn.test;
import com.lhy.csdn.impl.CTO;
import com.lhy.csdn.impl.Programer;
import com.lhy.csdn.impl.TeamLeader;
public class Test {
public static void main(String[] args) {
CTO cto = new CTO(new TeamLeader(new Programer()));
cto.work();
}
}
运行结果
普通的程序员:敲代码
TeamLeader review 程序员的代码
CTO检查TeamLeader工作成果