淄博网站制作优化,科技网站制作公司,帮忙做文档的网站,开发公司房屋维修办法模式定义
将一个接口转换成客户希望的另一个接口#xff0c;使接口不兼容的类可以一起工作
既可以作为类结构型模式#xff0c;也可以作为对象结构型模式
模式结构 类适配器模式 对象适配器模式 Target#xff1a;目标抽象类 是Adapter设计的工作目标 Adapter#xff1a…模式定义
将一个接口转换成客户希望的另一个接口使接口不兼容的类可以一起工作
既可以作为类结构型模式也可以作为对象结构型模式
模式结构 类适配器模式 对象适配器模式 Target目标抽象类 是Adapter设计的工作目标 Adapter适配器类Adaptee适配者类 是期望Target具有的类似动作来源 Client客户类
类适配器代码
public class Adapter extends Adaptee implements Target {public void request() {specificRequest();}}
对象适配器代码
public class Adapter extends Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee adaptee;}public void request() {adaptee.specificRequest();}}
默认适配器模式Default Adapter Pattern
又称缺省适配器模式、单接口适配器模式
先设计一个抽象类实现接口并为该接口中每个方法提供一个默认实现空方法该抽象类的子类可有选择地override父类的某些方法来实现需求
适用于不想使用一个接口所有的方法的情况
双向适配器
在对象适配器的使用过程中如果在Adapter中同时包含对Target类和Adaptee类的引用那么该Adapter就是一个双向适配器
Adaptee可以通过Adapter调用Target类中的方法Target类可以通过Adapter调用Adaptee类中的方法
实例
实例一仿生机器人
现需要设计一个可以模拟各种动物行为的机器人在机器人中定义了一系列方法如机器人叫喊方法cry()、机器人移动方法move()等。如果希望在不修改已有代码的基础上使得机器人能够像狗一样叫像狗一样跑使用适配器模式进行系统设计。
Target是机器人因为是机器人像狗一样应是机器人适配狗
实例二加密适配器
某系统需要提供一个加密模块将用户信息如密码等机密信息加密之后再存储在数据库中系统已经定义好了数据库操作类。为了提高开发效率现需要重用已有的加密算法这些算法封装在一些由第三方提供的类中有些甚至没有源代码。使用适配器模式设计该加密模块实现在不修改现有类的基础上重用第三方加密方法。
Target是数据库操作类Adaptee是加密算法
模式分析
优点 将Target类和Adaptee类解耦 通过引入一个Adapter类来重用现有的Adaptee类而无须修改原有代码 增加了类的透明性和复用性 将具体的实现封装在Adaptee类中对于客户端类来说是透明的而且提高了Adaptee的复用性 灵活性和扩展性都非常好 通过使用配置文件可以很方便地更换Adapter也可以在不修改原有代码的基础上增加新的Adapter类 符合开闭原则
对于类适配器模式 优点 由于Adapter类是Adaptee类的子类因此可以在Adapter类中override一些Adaptee的方法使得Adapter的灵活性更强 缺点 使用有一定的局限性不能将一个Adaptee类和它的子类都适配到目标接口 对于不支持多重继承的语言一次最多只能适配一个Adaptee类 Target类只能为抽象类不能为具体类
对于对象适配器模式
优点 一个对象适配器可以把多个不同的Adaptee适配到同一个Target 同一个Adapter可以把Adaptee类和它的子类都适配到目标接口 缺点 置换Adaptee类的方法相对复杂 先做一个Adaptee类的子类将Adaptee类的方法置换掉把子类当做实际的Adaptee进行适配
适用环境 系统需要使用现有的类而这些类的接口不符合系统的需要 想要建立一个可以重复使用的类用于与一些彼此之间没有太大关联的一些类包括一些可能在将来引进的类一起工作