public class JavaProgrammer implements Programmer{
@Override
public void code() {
System.out.println("写java代码");
}
}
public class PythonProgrammer implements Programmer{
@Override
public void code() {
System.out.println("写Python代码");
}
}
//定义装饰者抽象类,同时实现原始接口
public abstract class DecorateProgrammer implements Programmer{
protected Programmer mProgrammer;
public DecorateProgrammer(Programmer programmer){
this.mProgrammer=programmer;
}
public void code(){
mProgrammer.code();
}
}
//定义装饰者实现类
public class DecorateJavaProgrammer extends DecorateProgrammer {
public DecorateJavaProgrammer(Programmer programmer) {
super(programmer);
}
@Override
public void code() {
mProgrammer.code();
System.out.println("java程序员还会设计模式");
}
}
public class DecoratePythonProgrammer extends DecorateProgrammer {
public DecoratePythonProgrammer(Programmer programmer) {
super(programmer);
}
@Override
public void code() {
mProgrammer.code();
System.out.println("Python程序员还会设计模式");
}
}
//使用装饰者模式
DecorateJavaProgrammer decorateJavaProgrammer = new DecorateJavaProgrammer(new JavaProgrammer());
decorateJavaProgrammer.code();
DecoratePythonProgrammer decoratePythonProgrammer = new DecoratePythonProgrammer(new PythonProgrammer());
decoratePythonProgrammer.code();
1. 什么是装饰者模式?有什么作用?
装饰者模式是指通过包装的形式且不修改原有类结构的基础上添加新的功能,属于结构型设计模式。它的主要作用是不增加很多子类的情况下扩展类的功能。
2. 如何实现?
//定义原始接口
//定义原始接口实现类
//定义装饰者抽象类,同时实现原始接口
//定义装饰者实现类
//使用装饰者模式
注:关键点是确定好装饰者和被装饰者。
3. JDK或Android的应用举例
在JDK中BufferedReader使用的就是装饰者模式;在Android中,ContextWrapper的设计就是使用了装饰者模式。
4. 小结
装饰者模式的优缺点: 优点:
缺点: