设计模式 - 适配器模式(adapter pattern) 详解
2014-06-17 14:34
531 查看
适配器模式(adapter pattern) 详解
本文地址: http://blog.csdn.net/caroline_wendy适配器模式(adapter pattern): 将一个类的接口, 转换成客户期望的另一个接口. 适配器让原本不兼容的类可以合作无间.
适配器模式(adapter pattern)主要包括:
1. 被适配者接口(adaptee interface): 需要被适配的接口.
2. 适配器(adapter): 转换的类;
3. 目标接口(target interface): 需要转换成为的接口.
4. 客户(client): 具体使用的类.
具体方法:
1. 被适配者(adaptee interface)接口, 和实现接口具体的类.
/**
* @time 2014年6月17日
*/
package adapter;
/**
* @author C.L.Wang
*
*/
public interface Turkey {
public void gobble();
public void fly();
}
/**
* @time 2014年6月17日
*/
package adapter;
/**
* @author C.L.Wang
*
*/
public class WildTurkey implements Turkey {
/* (non-Javadoc)
* @see adapter.Turkey#gobble()
*/
@Override
public void gobble() {
// TODO Auto-generated method stub
System.out.println("Gobble gobble! ");
}
/* (non-Javadoc)
* @see adapter.Turkey#fly()
*/
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("I'm flying a short distance! ");
}
}
2. 目标接口(target interface), 和实现接口具体的类./**
* @time 2014年6月17日
*/
package adapter;
/**
* @author C.L.Wang
*
*/
public interface Duck {
public void quack();
public void fly();
}
/**
* @time 2014年6月17日
*/
package adapter;
/**
* @author C.L.Wang
*
*/
public class MallardDuck implements Duck {
/* (non-Javadoc)
* @see adapter.Duck#quack()
*/
@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("Quack! ");
}
/* (non-Javadoc)
* @see adapter.Duck#fly()
*/
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("I'm flying! ");
}
}
3. 适配器(adapter): 被适配者接口(adaptee interface) 转换 目标接口(target interface).组合被适配者类接口, 实现目标类接口.
/**
* @time 2014年6月17日
*/
package adapter;
/**
* @author C.L.Wang
*
*/
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapter (Turkey turkey) {
this.turkey = turkey;
}
/* (non-Javadoc)
* @see adapter.Duck#quack()
*/
@Override
public void quack() {
// TODO Auto-generated method stub
turkey.gobble();
}
/* (non-Javadoc)
* @see adapter.Duck#fly()
*/
@Override
public void fly() {
// TODO Auto-generated method stub
for (int i=0; i<5; ++i) { //多次飞行
turkey.fly();
}
}
}
4. 客户(client)方法需要使用目标类, 把被适配者(adaptee)的具体类, 通过适配器(adapter), 转换为目标(target)类, 进行调用:
/**
* @time 2014年6月17日
*/
package adapter;
/**
* @author C.L.Wang
*
*/
public class DuckTestDrive {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
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();
}
}
5. 输出.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!
相关文章推荐
- 设计模式 - 适配器模式(adapter pattern) 枚举器和迭代器 详解
- 设计模式之适配器模式(Adapter Pattern)
- 设计模式-适配器模式(Adapter Pattern)
- .NET设计模式(8):适配器模式(Adapter Pattern)
- 解读设计模式----适配器模式(Adapter Pattern),麻雀飞上枝头真能成凤凰?
- 设计模式之四:适配器模式(Adapter Pattern)
- 深入浅出设计模式-007:适配器模式(Adapter Pattern)
- c++设计模式:适配器模式(Adapter Pattern)
- .NET设计模式-适配器模式(Adapter Pattern)
- 设计模式学习笔记(3)——适配器模式(Adapter Pattern)
- .NET设计模式-适配器模式(Adapter Pattern)
- NET设计模式6--适配器模式(Adapter Pattern)
- 极速理解设计模式系列:6.适配器模式(Adapter Pattern)
- 设计模式学习笔记十一:适配器模式(Adapter Pattern)
- 设计模式——适配器模式【Adapter Pattern】
- .Net设计模式 Adapter 适配器模式(结构型模式)Adapter Pattern
- 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)
- 解读设计模式----适配器模式(Adapter Pattern)
- 解读设计模式----适配器模式(Adapter Pattern),麻雀飞上枝头真能成凤凰?
- 设计模式-适配器模式(Adapter Pattern)