设计模式学习(七)适配器模式与外观模式
本文是阅读《Head First 设计模式》的学习记录。详细内容可以自行阅读书本
适配器模式与外观模式
适配器模式
适配器模式定义:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
生活中类似的当两角插头遇到三角插座时,我们需要一个交流电适配器来使插座满足插座要求。
举例
假设现在我们缺少鸭子对象,只能拿火鸡对象来冒充。因为接口不同,不能直接拿来使用,所有我们需要使用适配器模式来改造一下。
1.把鸭子对象和火鸡对象的接口实现
鸭子接口
public interface Duck {
public void quack();
public void fly();
}
火鸡接口
public interface Turkey {
//叫声接口与鸭子不同
public void gobble();
//飞不远
public void fly();
}
public class WildTurkey implements Turkey{
@Override
public void gobble() {
System.out.println("gobble");
}
@Override
public void fly() {
//飞行距离近
System.out.println("short fly");
}
}
2.创建适配器,使得火鸡对象调用的时候,能够有和鸭子对象一样的方法。用户使用时,并不知道其实调用的火鸡对象。
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
@Override
public void quack() {
turkey.gobble();
}
@Override
public void fly() {
//多次调用让火鸡拿飞行数量换距离
for (int i = 0; i < 5; i++) {
turkey.fly();
}
}
}
3.测试
public class Test {
public static void main(String[] args) {
WildTurkey wildTurkey = new WildTurkey();
TurkeyAdapter adapter = new TurkeyAdapter(wildTurkey);
adapter.quack();
adapter.fly();
}
}
外观模式
提供了一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易实现。
注意和适配器模式的区别在于:
适配器模式是改变接口来到达客户需求。
外观模式是简化接口。