结构型模式(从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。)

适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式。


适配器模式

一、场景

ps2 to usb 转接线

二、本质

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。

三、角色

目标接口:客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。

适配器:通过包装一个需要适配的对象,把原接口转换成目标接口。

需要适配的类:需要适配的类或适配者类。

四、示例

方式一 :类适配器方式 -->继承方式

设计模式学习笔记---适配器模式adapter(Java版)_适配器模式



package com.lgd.adapter;

/**
* 目标接口 相当于usb接口
* @author liguodong
*
*/
public interface Target {
void handleReq();
}




package com.lgd.adapter;

/**
* 适配器 相当于ps2 to usb 转接器 (类适配方式)
* @author liguodong
*
*/
public class Adapter1 extends Adaptee implements Target{

@Override
public void handleReq() {
// TODO Auto-generated method stub
super.request();
}


}




package com.lgd.adapter;

/**
* 被适配的类 相当于PS/2键盘
* @author liguodong
*
*/
public class Adaptee {
public void request()
{
System.out.println("可以完成客户请求的需要的功能,打字功能。");
}
}




package com.lgd.adapter;

/**
* 客户端类 相当于笔记本-->只有USB接口
* @author liguodong
*
*/

public class Client {
public void test01(Target t)
{
t.handleReq();
}
public static void main(String[] args) {
Client client = new Client();
//Adaptee adaptee = new Adaptee();//被适配器
Target target = new Adapter1();
client.test01(target);
}
}



方式二:对象适配器方式  -->使用了组合的方式,跟被适配对象整合

设计模式学习笔记---适配器模式adapter(Java版)_客户端_02


package com.lgd.adapter;

/**
* 适配器 相当于ps2 to usb 转接器 (对象适配器方式使用了组合的方式,跟被适配对象整合)
* @author liguodong
*
*/
public class Adapter2 implements Target{

private Adaptee adaptee;
@Override
public void handleReq() {
// TODO Auto-generated method stub
adaptee.request();
}
public Adapter2(Adaptee adaptee) {
super();
this.adaptee = adaptee;
}

}




package com.lgd.adapter;

/**
* 客户端类 相当于笔记本-->只有USB接口
* @author liguodong
*
*/

public class Client2 {
public void test(Target t)
{
t.handleReq();
}
public static void main(String[] args) {
Client2 client = new Client2();
Adaptee adaptee = new Adaptee();//被适配器
Target target = new Adapter2(adaptee);
client.test(target);
}
}



经常应用于旧系统的改造与升级。