Head First设计形式-适配器模式

Head First设计模式-适配器模式

一、整体代码

       Duck.java

public interface Duck {
	public void quack();
	public void fly();
}

       Turkey.java

public interface Turkey {
	public void gobble();
	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");
	}
}

      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");
	}
}

     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();
		}
	}
}

     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();
	}
}

二、结果

Head First设计形式-适配器模式


Head First设计形式-适配器模式


三、解释

       有点类似于装饰者,不是增加功能,而是转换接口。

       将一个类的接口转换成客户期望的另一个接口。适配器让原来不兼容的类可以合作无间。