您的位置:首页 > 其它

每天学一点设计模式-适配器模式

2014-11-17 10:37 281 查看

适配器模式

英文名

Adapter Pattern

定义

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

理解

1.该模式中有3个对象:目标对象,适配器,被适配者

2.目标对象:客户想要用的接口对象,我们想要将别的接口伪装成的对象

3.适配器:目标对象和被适配者的中间组件,该类中存放有被适配者,但是继承目标对象。对外,他是目标对象,自己内部却是调用了被适配者的方法来伪装成目标对象。

4.被适配者:客户想要将该对象变成目标对象,适配器通过恰当的调用该类中的方法从而达到伪装效果

代码

目标对象

public interface Duck {
public void quack();

public void fly();
}

目标对象的真正实现类

public class MallardDuck implements Duck {

@Override
public void quack() {
System.out.println("Quack!");
}

@Override
public void fly() {
System.out.println("I'm flying");
}

}


被适配者

public interface Turkey {
public void gobble();

public void fly();

}

被适配者的实现类

public class WildTurkey implements Turkey {

@Override
public void gobble() {
System.out.println("Gobble gobble");

}

@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("I'm flying a short distance");
}

}

想要将Turkey对象转换成Turkey对象的适配器

public class TurkeyAdapter implements Duck {
Turkey turkey;

public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}

@Override
public void quack() {
// TODO Auto-generated method stub
turkey.gobble();
}

@Override
public void fly() {
// TODO Auto-generated method stub
for(int i=0;i<5;i++){
turkey.fly();
}
}

}


测试程序

public class DuckTestDrive {

public static void main(String[] args) {
MallardDuck duck = new MallardDuck();
Turkey turkey = new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey);

System.out.println("The turkey says ...");
turkey.gobble();
turkey.fly();
System.out.println("The duck says ...");
duck.quack();
duck.fly();
System.out.println("The turkeyAdapter says ...");
turkeyAdapter.quack();
turkeyAdapter.fly();

}

}

输出

The turkey says ...
Gobble gobble
I'm flying a short distance
The duck says ...
Quack!
I'm flying
The 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: