Decoratorパターン

こんなんだっけか。違うような気がする。


public interface Tyamada {
    public void setHair(Styling wax);

    public Hair getHair();

    public boolean isFuury();
}

public class RegularYamada implements Tyamada {

    @Override
    public void setHair(Styling wax) {
        //Can do nothing
    }

    @Override
    @Deprecated
    public Hair getHair() {
        throw new UnsupporttedOperationException();
    }

    @Override
    public boolean isFuury() {
        return true;
    }

} 


public class WiggedYamada implements Tyamada {

    Tyamada original;
    Hair wig;

    public WiggedYamada(RegularYamada takashi) {
        this.original = takashi;
    }

    @Override
    public void setHair(Styling wax) {
        this.wig = Hair.newWigWith(wax);        
    }

    @Override
    public Hair getHair() {
        Hair result = this.wig; 
        this.wig = null;
        return result;
    }

    @Override
    public boolean isFuury() {
        return true;
    }
}