对于装饰器和包装器 和 被修饰类之间的关系 一定是 继承和实现的关系,具有层次关系
对于装饰器和包装器和 代理模式的不同点在于 对于装饰器和包装器是在原有功能的基础上来增加一些新的功能;
其相同点为 : 都是通过外部注入被代理类或被包装或被修饰类数据
对于相关模板的参考可以通过 (decorator)或(wrapper) 关键字进行搜索
例如: org.springframework.http.client.AbstractClientHttpRequestFactoryWrapper 或 org.springframework.core.DecoratingClassLoader
public class CharacterWrapper implements CharSequence { private final CharSequence delegate; public CharacterWrapper(CharSequence delegate) { this.delegate = delegate; } @Override public int length() { return delegate.length(); } @Override public char charAt(int index) { return delegate.charAt(index); } @Override public CharSequence subSequence(int start, int end) { return delegate.subSequence(start, end); } @Override public String toString() { return delegate.toString(); } @Override public IntStream chars() { return delegate.chars(); } @Override public IntStream codePoints() { return delegate.codePoints(); } }
public class DecoratingCharacter implements CharSequence { private final CharSequence decorator; public DecoratingCharacter(CharSequence decorator) { this.decorator = decorator; } /** * 委派{@link CharSequence} 全部的方法 */ @Override public int length() { return decorator.length(); } @Override public char charAt(int index) { return decorator.charAt(index); } @Override public CharSequence subSequence(int start, int end) { return decorator.subSequence(start, end); } @Override public String toString() { return decorator.toString(); } @Override public IntStream chars() { return decorator.chars(); } @Override public IntStream codePoints() { return decorator.codePoints(); } public String getDescription(){ return toString(); } }