适配器模式
日常生活中的标准电压为220V,而我们所使用的电器的电压确实各种各样的,因此,当为它们充电时就需要使用相应地充电器在和标准电压和电器电压之间进行转换,这里充电器的作用就相当于一个适配器。
而在编程设计中,适配器模式是将一个类的接口转换成客户期望的接口。接下来以具体的实例对适配器进行介绍。
分类
对象适配器
通过对象组合的方式来进行处理的,而不是通过继承的方式,组合相比继承是更推荐的方式。类适配器
通过类继承的方式来实现,和对象适配器相比类适配器的依赖性更大,并且随着继承膨胀变得难以控制,灵活性得不到保障。
实例
教师的工作是教书(teach()),学生的工作是学习(study()),程序员的工作是编程(program()),不同的行业有不同的工作形式,现在希望编写一个程序输出表示不同行业的工作形式。
1. 不使用适配器模式
//教师行业接口 public interface ITeacher { String teach(); } //教师行业实现 public class Teacher implements ITeacher{ public String teach() { return "教书"; } } //程序员行业接口 public interface IProgrammer { String program(); } //程序员行业实现 public class Student implements IProgrammer{ public String program() { return "编程"; } }
2. 定义适配器模式
//统一的接口 public interface IWorker { //worker的类型以Object代替,以适配各种类型 String work(Object worker); boolean Support(Object worker); } //教师的适配器 public class Teacher implements IWorker{ public String work(Object obj){ return ((ITeacher)obj).teach(); } public boolean Support(Object worker){ return worker instanceof ITeacher; } } //程序员的适配器 public class Programmer implements IWorker{ public String work(Object obj){ return ((IProgrammer)obj).program(); } public boolean Support(Object worker){ return worker instanceof IProgrammer; } }
总结
1.适配器模式优点
将目标类和适配器类解耦,通过引入一个适配器类来复用现有的适配器类,而无须修改原代码。
- 提高了类的复用,增加了类的透明度,将具体实现封装在适配器类中,对目标类来说是透明的。
使编程更具灵活性和可扩展性,可以很方便地更换适配器,也可以快速地增加新的适配器类。
2.适配器模式缺点
过多地使用适配器,会让系统变得非常零乱,不易从整体进行把握。