每天学一点设计模式-适配器模式
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
相关文章推荐
- 每天学一点设计模式-装饰者模式
- 每天一设计模式之适配器模式
- 每天学一点设计模式-外观模式
- 每天学一点设计模式-工厂方法模式
- 每天学一点设计模式-状态模式
- 每天学一点设计模式-策略模式
- 每天学一点设计模式-抽象工厂模式
- 每天学一点设计模式-命令模式
- 每天一个设计模式之 -- 适配器模式
- 每天学一点设计模式-单例模式
- 每天学一点设计模式-观察者模式
- 每天学一点设计模式-模板方法模式
- 论:设计模式是不是每天要用
- 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)
- 深入浅出Java设计模式之适配器模式
- 关于软件架构、设计模式和应用框架的一点看法
- GoF 23个经典的设计模式6--结构模式之适配器模式(未完代续)
- 深入浅出Java设计模式之适配器模式
- 设计模式的一点小小想法
- 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)