设计模式笔记(八):结构型-适配器模式

适配器模式(Adapter Pattern)

意图

当一个类的接口转换成客户希望的另外一个接口的适合,适配器模式使得原本由于接口不兼容不能一起工作的类可以在一起工作

主要解决

在系统中常常要将一些现存的对象放到新环境中,而新环境接口是现存对象不能满足的

何时使用

1:系统需要使用现有的类,但是这个类的接口不满足系统需要
2:想要建立一个可以重复使用的类,用于一些批次之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的即可
3:通过接口转换,将一个类插入到另一个类系中,(比如老虎和飞禽,现在多了一个能飞的老虎,在不增加实体需求下 增加一个适配器,里面包含虎对象,实现飞接口)

如何解决

继承或者依赖

关键代码

适配器继承或者依赖已经有的对象,实现想要的目标接口

实例

1:美国电器110v 中国220v 需要一个适配器来转换
2:jdk1.1提供Enumeration接口 现在1.2中提供了iterator接口 ,想要使用1.2jdk 就要把一起系统的Rnumeration接口转换iterator接口
3:linux上运行windows程序
4:jvm就是一个类似适配器的一个虚拟机

优点

1:可以让两个没有关联的类一起运行,
2:提高类的复用
3:增加类的透明
4:灵活

缺点

1:过多使用适配器,让系统显得凌乱 ,不容易把握整体,比如明明调用的是a接口但是内部适配成b接口的实现,一个系统中出现太多这种情况会爆炸,如果不是很有必要不适用适配器,而是对系统重构
2:由于java只能继承一个类,所以最多只能适配一个适配类,而且目标类必须是抽象类

使用场景

有动机的修改一个运行正常的系统接口

注意

适配器不是详细设计时候设计的 而是解决在系统上线过程中出现问题

总结:通过一个中间适配器类来增加已有类的功能,这个只是补救方式 最好的方式还是重构项目

代码地址:https://github.com/xuxianyu/myGitHub/tree/master/DisignPattern/src/main/java/com/xxx/structural/adapter

你可能感兴趣的:(设计模式笔记(八):结构型-适配器模式)