设计模式--------适配器模式
采用三个问题说明适配器模式
- 现在的写法有什么问题?
- 什么是适配器模式
- 适配器模式有什么好处
使用一个问题来说明问题
- 有一个公司训练蜂鸟,让蜂鸟听命令飞和走路,现在他们引进了新品种,非洲鸵鸟,他们属于不同的种类,蜂鸟属于鸟,非洲鸵鸟属于鸵鸟,现在要使用训练蜂鸟的方式训练鸵鸟,让他们也能走路和飞
目前思路
- 蜂鸟属于鸟的接口
- 非洲鸵鸟属于鸵鸟的接口
- 他们是二个完全不同的类,无法差生关联,所以没有办法
什么是适配器模式
- 什么是适配器: 适配器类似于插座和插孔,大陆用的二个针的插座,但是到了香港就需要使用一个转接头将二个针的转换成三个针的
- 客户:目标接口(鸟)
- 适配器:实现了目标接口,并持有被适配者的实例(鸵鸟适配器)
- 被适配者:(鸵鸟)
- 适配器模式: 将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间
- 此模式可以通过创建适配器进行接口转换,让不兼容的接口编程兼容,这可以让客户从实现的接口解耦,如果需要改变接口,适配器可以改变的部分封装起来,客户就不必应对不同的接口而每次改变
Bird
public interface Bird {
public void walk();
public void fly();
}
Hummingbird 蜂鸟
public class Hummingbird implements Bird {
@Override
public void walk() {
System.out.println("Hummingbird walk");
}
@Override
public void fly() {
System.out.println("Hummingbird fly");
}
}
鸵鸟接口
public interface Ostrich {
public void walk();
public void fly();
}
非洲鸵鸟
public class AfricanOstrich implements Ostrich {
@Override
public void walk() {
System.out.println("AfricanOstrich walk");
}
@Override
public void fly() {
System.out.println("AfricanOstrich fly");
}
}
鸵鸟适配器
public class OstrichAdapter implements Bird {
public Ostrich ostrich;
public OstrichAdapter(Ostrich ostrich) {
this.ostrich = ostrich;
}
@Override
public void walk() {
ostrich.walk();
}
@Override
public void fly() {
ostrich.fly();
}
}
Main
public class App {
public static void main(String[] args) throws Exception {
Bird bird = new Hummingbird();
bird.walk();
bird.fly();
Ostrich ostrich = new AfricanOstrich();
ostrich.walk();
ostrich.fly();
bird = new OstrichAdapter(ostrich);
bird.walk();
bird.fly();
}
}
/// out
Hummingbird walk
Hummingbird fly
AfricanOstrich walk
AfricanOstrich fly
AfricanOstrich walk
AfricanOstrich fly
适配器模式有什么好处?
- 可以让不兼容的接口编程兼容
- 可以让客户从实现的接口解耦
- 使用对象组合
- 任何适配器的子类都可以使用适配器
END
不慕招式,勤修内功