设计模式-装饰器(decorator)/包装器(wrapper)


对于装饰器和包装器 和 被修饰类之间的关系 一定是 继承和实现的关系,具有层次关系

对于装饰器和包装器和 代理模式的不同点在于 对于装饰器和包装器是在原有功能的基础上来增加一些新的功能;

其相同点为 : 都是通过外部注入被代理类或被包装或被修饰类数据

 

对于相关模板的参考可以通过 (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();
    }
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM