装饰器模式
装饰模式(Decorator Pattern)是一种比较常见的模式,其定义如下:Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality.(动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。)
装饰器模式又叫做包装器模式,指在不改变原有对象的基础上,动态的给一个对象添加一些额外的指责。
装饰器模式和代理模式非常相似,可以说,装饰器模式是代理模式的一个特殊应用。先看一下代理模式的代码:
public class ConnectionProxy implements Connection {
private Connection connection;
private String ds;
public ConnectionProxy(Connection connection, String ds) {
this.connection = connection;
this.ds = ds;
}
}
我们可以对数据库连接Connection进行代理使用,就是之后的代码可以不用Connection,用ConnectionProxy进行代替。而装饰器模式如下:
@Data
public class ConnectionProxy {
private Connection connection;
private String ds;
public ConnectionProxy(ConnectionProxy connectionProxy) {
this.connection = connectionProxy.getConnection();
this.ds = connectionProxy.getDs();
}
}
至于入参的ConnectionProxy的getConnection()和getDs()实现我们并不用关心,就是用子类的重写方法对该ConnectionProxy进行增强。这就是装饰器模式。