一,前言
随着上一篇原型模式的完成,6 种创建型设计模式我们都说了一遍;
创建型模式包含:
工厂方法模式
抽象工厂模式
单例模式
建造者模式
原型模式
后面将开始介绍 7 种结构型设计模式:(其中组合模式在开篇说过了)
桥接模式
适配器模式
装饰模式
组合模式
享元模式
外观模式
代理模式
本篇,介绍适配器模式:
实际项目中,经常会遇到以前的模块接口和当前设计的模块接口不吻合以至于无法复用的情况;
在项目模块中引入第三方组件时也时长会有类似问题出现;
适配器模式就是将一个类的接口转换成另一个接口的模式;
能够在不改变原有代码的情况下,使原本不兼容的接口可以一起工作;
二,适配器模式简介
适配器模式:将一个类的接口转换成客户希望的另外一个接口;
适配器模式又分为:类适配器、对象适配器;
基于适配器模式的定义和特点,我们选用一个例子来进行说明:
有句话这么说:你有多大鞋,我就多大脚;
三,适配器模式例子
适配器模式包含:被适配角色、适配器角色、目标角色;
我们将 39 号和 41 号的脚适配为 40 号的脚,并由 40 的鞋子调用穿鞋方法;
1,被适配者接口 Adaptee:
package com.brave.adapter.foot;
/**
* 被适配者接口
* @author Brave
*
*/
public interface Adaptee {
// 展示原始信息
void putOnShoes();
}
复制代码
2,实现被适配者接口的 39 号脚和 41 号脚:
package com.brave.adapter.foot;
/**
* 39号脚
* @author Brave
*
*/
public class Foot39 implements Adaptee{
@Override
public void putOnShoes(){
System.out.println("脚:其实我是39号脚!");
}
}
复制代码
package com.brave.adapter.foot;
/**
* 39号脚
* @author Brave
*
*/
public class Foot41 implements Adaptee{
@Override
public void putOnShoes(){
System.out.println("脚:其实我是41号脚!");
}
}
复制代码
3,适配器接口:用来将 39 和 41 号脚适配成 40 号鞋子需要的脚:
package com.brave.adapter.foot;
/**
* 适配器接口
* @author Brave
*
*/
public interface Adapter {
// 穿鞋40号鞋的方法
void putOnShoes40();
}
复制代码
4,实现适配器接口的 40 号脚适配器:将任何被适配者适配成 40 号鞋子需要的脚:
package com.brave.adapter.foot;
// 适配为40号
public class Adapter40 implements Adapter {
private Adaptee adaptee;
public Adapter40(Adaptee adaptee) {
System.out.println("适配器:给我你的脚,不管你多大脚,我都将你适配为40号!");
this.adaptee = adaptee;
System.out.println("脚:脚已经给你了,你看着办吧");
}
@Override
public void putOnShoes40() {
System.out.println("适配器:来试试40号的鞋子吧");
adaptee.putOnShoes();
}
}
复制代码
5,40 号鞋子类:只能调用符合 40 号脚特征的脚
package com.brave.adapter.foot;
/**
* 40号的鞋子
* @author Brave
*
*/
public class Shoes40 {
private Adapter adapter;
public Shoes40(Adapter adapter) {
this.adapter = adapter;
}
private void putOn(){
adapter.putOnShoes40();
}
}
复制代码
6,测试类
package com.brave.adapter.foot;
public class Client {
public static void main(String[] args) {
Adaptee foot = new Foot39();
Adapter adapter = new Adapter40(foot);
adapter.putOnShoes40();
System.out.println("---------------------");
foot = new Foot41();
adapter = new Adapter40(foot);
adapter.putOnShoes40();
}
}
复制代码
测试输出:
适配器:给我你的脚,不管你多大脚,我都将你适配为40号!
脚:脚已经给你了,你看着办吧
适配器:来试试40号的鞋子吧
脚:其实我是39号脚!
---------------------
适配器:给我你的脚,不管你多大脚,我都将你适配为40号!
脚:脚已经给你了,你看着办吧
适配器:来试试40号的鞋子吧
脚:其实我是41号脚!
复制代码
四,适配器模式总结
虽然与客户端直接通信的是适配器,但真正进行工作的实体确是被适配的类;
对于适配器,工作量取决于被适配对象 Adaptee 和目标接口 Target 的匹配程度;
使用场景:
适配器模式,能够在不改变原有代码的情况下,使原本不兼容的接口可以一起工作,符合满足开放-封闭原则;
评论