
【适配器模式】将一个类的接口,转换成客户期望的另外一个接口。适配器让原本接口不兼容的类可以合作无间。
1,Duck接口
package com.pattern.adapter; public interface Duck { public void quack();
public void fly(); }
2,Duck实现类
package com.pattern.adapter; public class MallardDuck implements Duck{ /**
* @see com.pattern.adapter.Duck#quack()
*/
@Override
public void quack() {
System.out.println("Quack");
} /**
* @see com.pattern.adapter.Duck#fly()
*/
@Override
public void fly() {
System.out.println("I'm flying");
} }
3,Turkey接口
package com.pattern.adapter; public interface Turkey { public void gobble();
public void fly(); }
4,Turkey实现类
package com.pattern.adapter; public class WildTurkey implements Turkey{ /**
* @see com.pattern.adapter.Turkey#gobble()
*/
@Override
public void gobble() {
System.out.println("Gobble gobble");
} /**
* @see com.pattern.adapter.Turkey#fly()
*/
@Override
public void fly() {
System.out.println("I'm flying a short distance");
} }
5,适配器类
package com.pattern.adapter; public class TurkeyAdapter implements Duck{
Turkey turkey; public TurkeyAdapter(Turkey turkey){
this.turkey = turkey;
} /**
* @see com.pattern.adapter.Duck#quack()
*/
@Override
public void quack() {
turkey.gobble();
} /**
* @see com.pattern.adapter.Duck#fly()
*/
@Override
public void fly() {
for(int i=0;i<5;i++){
turkey.fly();
}
} }
6,测试类
package com.pattern.adapter; 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("\n The Duck says...");
testDuck(duck); System.out.println("\n TurkeyAdapter says...");
testDuck(turkeyAdapter); } static void testDuck(Duck duck){
duck.quack();
duck.fly();
}
}
输出结果为:
The Turkey says....
Gobble gobble
I'm flying a short distance
The Duck says...
Quack
I'm flying
TurkeyAdapter says...
Gobble gobble
I'm flying a short distance
I'm flying a short distance
I'm flying a short distance
I'm flying a short distance
I'm flying a short distance
类图为: