上一篇文章分享了适配器模式,这篇推文整理一下装饰模式,和代理模式非常相似,但是实现和应用的场景不一样
装饰模式就是给一个对象增加一些新的功能,要求装饰对象(代理对象)和被装饰对象(真实类)实现同一个接口,装饰对象持有被装饰对象的实例
代码语言:javascript复制public interface SourceAble {
public void sourceMethod();
}
被装饰类(真实类):
代码语言:javascript复制public class Source implements SourceAble{
@Override
public void sourceMethod() {
System.out.println("this is Source Method!");
}
}
装饰类(代理类):
代码语言:javascript复制public class Decorate implements SourceAble {
//private Source source;
private SourceAble source;
public Decorate(SourceAble source) {
super();
this.source = source;
}
@Override
public void sourceMethod() {
//调用方法之前可以加入注释等待
System.out.println("before decorate!");
source.sourceMethod();
//调用完之后同理
System.out.println("after decorate!");
}
}
测试类:
代码语言:javascript复制public class Test {
public static void main(String[] args) {
SourceAble source = new Source();
SourceAble obj = new Decorate(source);
obj.sourceMethod();
}
}
代码语言:javascript复制before decorate!
this is Source Method!
after decorate!
总结:
装饰模式中,装饰类对被代理对象没有控制权,只能为其增加一层装饰,以加强被装饰对象的功能下一篇推文整理一下和装饰模式的进阶--代理模式--使用到极致开发就是SpringAOP的简单实现原理