【适配器模式】将一个类的接口,转换成客户期望的另外一个接口。适配器让原本接口不兼容的类可以合作无间。
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
类图为: