引言:
设计模式是一套反复被使用,多数人知晓,经过分类编目和时间沉淀的,是软件高级开发人员在开发过程遇到的一般性问题的一种解决方案,这些解决方案是软件高级开发人员在开发的过程中长期的不断试验和错误总结出来的,遵守一些设计模式可以开发高效,简洁又易于后期维护和管理的系统。
一:
适配器:将一个类的接口转换成客户期望的另一个接口类型,适配器的原则是让原本不兼容的类可以合作无间
适配器模式属于设计模式的结构型模式,可以将类和对象组合在一起,形成更大的结构...
适配器模式总共有三种类型:类适配器,对象适配器,接口适配器。
类适配器:是通过类的继承的方式实现的
对象适配器:是通过对象的组合而实现的
接口适配器:是通过接口的实现和成为抽象类实现的
本文案例:使用 鸭子类和火鸡类来介绍适配器的使用
Duck:鸭子
Turkey:火鸡
GreenDuck:绿皮鸭
WildTurkey:野火鸡
二:类适配器的使用
由于饭店需要的鸭子数量较大,库存暂时不足,因此用一些火鸡充当鸭子过去
/**
*鸭子目标接口
*/
public interface Duck {
//飞行速度
public void fly();
//食量
public void eat();
}
/**
* 火鸡的接口
* @author Administrator
*
*/
public interface Turkey {
//飞行速度
public void turkeyFly();
//食量
public void turkeyEat();
}
**
* 鸭子类适配器,通过继承的方式
* @author Administrator
*/
public class EAdapterDuck extends WildTurkey implements Duck {
//在方法上调用火鸡的实现
@Override
public void fly() {
turkeyFly();
}
@Override
public void eat() {
turkeyEat();
}
public static void main(String[] args) {
Duck duck = new EAdapterDuck();
duck.fly();
duck.eat();
}
继承火鸡实现类和实现鸭子接口,将鸭子接口方法的实现换成火鸡的方法。
三:对象适配器
(小草图...为了让大家更看清楚)
/**
* 鸭子对象适配器,采用对象模式,通过组合的方式传入火鸡
* @author Administrator
*/
public class AdapterDuck implements Duck{
private Turkey turkey; // 传入火鸡
public AdapterDuck(Turkey turkey) {
this.turkey = turkey;
}
@Override
public void fly() {
turkey.turkeyFly();
}
@Override
public void eat() {
turkey.turkeyEat();
}
public static void main(String[] args) {
Duck duck = new AdapterDuck(new WildTurkey());
duck.fly();
duck.eat();
}
}
AdapterDuck是适配器,Duck是目标接口,WildTurkey是被适配者,通过组合的形式在适配器使用被适配者。
四:接口适配器,
/**
* 接口适配器,实现鸭子接口
* @author Administrator
*/
public abstract class AbstractAdapterDuck implements Duck{
@Override
public void fly() {};
@Override
public void eat() {};
}
/**
* 接口适配器的实现
* @author Administrator
*/
public class AAdapterDuck extends AbstractAdapterDuck{
@Override
public void fly() {
System.out.println("我是接口适配器");
}
}
接口适配器的用意是当一个接口有很多方法时,又只需实现其中几个,便可用抽象类作为具体接口实现而不实现其方法
方法留给抽象类的具体子类来实现。
接口适配器: 抽象类作为 适配器,这样做的好处是 让具体实现类代码更直观,简介,不臃肿,若是一大堆不处理的类出现在具体类反而显得不美观和臃肿。
(以上例子均参考Head First设计模式书籍)
结尾:好啦,适配器模式的介绍就到这了,当你想使用一个接口但又不符合现在的类的结构时便可以通过适配器来转换,
适配器的原则就是让原本不兼容的类能够合作无间。