設計模式——適配器模式(Adapter Pattern)

適配器模式將一個類的接口,轉換成客戶期望的另一個接口。適配器讓原本接口不兼容的類可以合作無間。


類圖

220342630.jpg

(圖片源於網絡)


代碼實現(Java)

// Duck.java
public interface Duck {
    public void quack();
    public void fly();
}


// MallardDuck.java
public class MallardDuck implements Duck {
    public void quack() {
        System.out.println("Quack");
    }
                              
    public void fly() {
        System.out.println("I'm flying");
    }
}


// Turkey.java
public interface Turkey {
    public void gobble();
    public void fly();
}


// TurkeyAdapter.java
public class TurkeyAdapter implements Duck {
    Turkey turkey;
                       
    public TurkeyAdapter(Turkey turkey) {
        this.turkey = turkey;
    }
                          
    public void quack() {
        turkey.gobble();
    }
                        
    public void fly() {
        for(int i=0; i < 5; i++) {
            turkey.fly();
        }
    }
}


// WildTurkey.java
public class WildTurkey implements Turkey {
    public void gobble() {
        System.out.println("Gobble gobble");
    }
                   
    public void fly() {
        System.out.println("I'm flying a short distance");
    }
}


測試代碼

// DuckTestDrive.java
public class DuckTestDrive {
    public static void main(String[] args) {
        MallardDuck duck = new MallardDuck();
          
        WildTurkey turkey = new WildTurkey();
        Duck turkeyAdapter = new TurkeyAdapter(turkey);
            
        System.out.println("The Turkey says...");
        turkey.gobble();
        turkey.fly();
          
        System.out.println("\nThe Duck says...");
        testDuck(duck);
           
        System.out.println("\nThe TurkeyAdapter says...");
        testDuck(turkeyAdapter);
    }
          
    static void testDuck(Duck duck) {
        duck.quack();
        duck.fly();
    }
}


運行效果

221848416.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章