設計模式-裝飾器(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