05. Adapter Pattern


Adapter Pattern

  • クラスインタフェースをクライアントに変換するために必要な別のインタフェース
  • .
  • アダプタは、互換性のないインタフェースをアクティブでないクラスと一緒に動作させることができます.
    Wrapper: int ➡️ Integer
  • ロール#ロール#

  • オブジェクトを囲む役割を果たす.(Object Wrapping)
  • 2つの非互換インタフェースを接続する動作
  • 異なるインターフェースを同じ
  • に変換する.
    例えば、
  • は、異なるプラグに対してアダプタを用いて変換することができる.
  • Problem

  • は、オブジェクトを使用するAPIが異なる.
  • Solution


    変換
  • 関数のオブジェクトを中央に配置します.


  • →変更を最小限に抑えてクライアントを維持します.



    Duck
    public interface Duck {
        public void quack();
        public void fly();
    }
    
    class MallardDuck implements Duck{
        public void quack(){
            System.out.println("Quack");
        }
    
        public void fly(){
            System.out.println("I'm flying");
        }
    }
    Turkey
    public interface Turkey {
        public void gobble();
        public void fly();
    }
    
    class WildTurkey implements Turkey{
        @Override
        public void gobble() {
            System.out.println("Gobble gobble");
        }
    
        @Override
        public void fly() {
            System.out.println("I'm flying a short distance");
        }
    }
    Turkey Adapter
    turkey->変換duck
    public class TurkeyAdapter implements Duck{
        Turkey turkey;
    
        public TurkeyAdapter(Turkey turkey) {
            this.turkey = turkey;
        }
    
        @Override
        public void quack() {
            turkey.gobble();
        }
    
        @Override
        public void fly() {
            for (int i = 0; i < 5; i++) {
                turkey.fly();
            }
        }
    }
  • Adapterでは、変更後にオブジェクトタイプを実行し、変更前にオブジェクトをフィールドに配置できます.