コードメモ > デザインパターン > アダプタ


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

インタフェースを変えることなく、ラップ。

エントリ

class Entry{
  public static void main(String[] args){
    Print p =new PrintBanner("Hello");
    p.printWeak();
    p.printStrong();
    
    Print p2 = new PrintBannerDelegation("hello2");
    p2.printWeak();
    p2.printStrong();
  }
}

委譲(delegation)パターン

public class PrintBannerDelegation implements Print{
  private Banner banner;
  public PrintBannerDelegation(String string){
    banner = new Banner(string);
  }
  public void printWeak(){
    banner.showWithParen();
  }
  public void printStrong(){
    banner.showWithAster();
  }
}

継承バージョン

public class PrintBanner extends Banner implements Print {
  public PrintBanner(String string){
    super(string);
  }
  public void printWeak(){
    showWithParen();
  }
  public void printStrong(){
    showWithAster();
  }
}
public interface Print{
  public abstract void printWeak();
  public abstract void printStrong();
}
public class Banner{
  private String string;
  public Banner(String string){
    this.string = string;
  }
  public void showWithParen(){
    System.out.println("(" + string + ")");
  }
  public void showWithAster(){
    System.out.println("*" + string + "*");
  }
}

継承すると、継承して作ったアダプタはスーパークラスと同じインタフェースを持つことを意識。