目录
上述代码 GitHub 地址:https://github.com/baicun/designPatterns
适配器模式:
将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容
适配器优点:
从用户角度看不到被适配者,只是调用适配者转化出来的目标接口,是解耦的。
适配器模式应用:
世界插座标准的充电转换插头
适配器实例:
对象适配器
使用组合实现(目标接口)
类图:
目标接口Duck.java:
public interface Duck {
public void quack();
public void fly();
}
目标接口实现类-GreenHeadDuck.java
public class GreenHeadDuck implements Duck {
@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println(" Ga Ga");
}
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("I am flying a long distance");
}
}
被适配接口-Turkey.java
public interface Turkey {
public void gobble();
public void fly();
}
被适配接口实现-Turkey.java
public class WildTurkey implements Turkey{
@Override
public void gobble() {
// TODO Auto-generated method stub
System.out.println(" Go Go");
}
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("I am flying a short distance");
}
}
适配器-TurkeyAdapter.java
public class TurkeyAdapter implements Duck{
private Turkey turkey;
public TurkeyAdapter(Turkey turkey)
{
this.turkey=turkey;
}
@Override
public void quack() {
turkey.gobble();
}
@Override
public void fly() {
for(int i=0;i<6;i++)
{
turkey.fly();
}
}
}
测试类:
public class MainTest {
public static void main(String[] args){
//对象适配器
GreenHeadDuck duck=new GreenHeadDuck();
duck.quack();
duck.fly();
WildTurkey turkey=new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey);
turkeyAdapter.quack();
turkeyAdapter.fly();
}
}
类适配器
多重继承实现(被继承者、目标接口)
类图:
适配器类:TurkeyAdapterClass.java
public class TurkeyAdapterClass extends WildTurkey implements Duck {
@Override
public void quack() {
super.gobble();
}
@Override
public void fly() {
super.fly();
super.fly();
super.fly();
}
}
测试类
public class MainTest {
public static void main(String[] args){
//类适配器
GreenHeadDuck duck=new GreenHeadDuck();
duck.quack();
duck.fly();
TurkeyAdapterClass turkeyAdapterClass = new TurkeyAdapterClass();
turkeyAdapterClass.quack();
turkeyAdapterClass.fly();
}
}