设计模式学习(五) 适配器模式
结构型模式:
--- 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题
--- 分类:
适配器模式,代理模式,桥接模式,装饰模式,组合模式,外观模式,享元模式
适配器模式:
原理:
-- 将一个类接口转换成客户希望的另外一个接口。
优点:
Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以在一起工作
模式中的角色:
- 目标接口(Target): 客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口
- 需要适配的类(Adaptee):需要适配的类或者适配者类
- 适配器(Adapter):通过包装一个需要适配的对象。把原接口转换成目标接口
实现方式:
1:类适配器:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.lp.adpater; public class Adapter extends Adaptee implements Target { @Override public void handleReq() { super.request(); } }
2:对象适配器:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.lp.adpater; public class Adaptee { public void request(){ System.out.println("可以完成客户需要的功能"); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.lp.adpater; public interface Target { void handleReq(); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.lp.adpater; public class Adapter implements Target { private Adaptee adaptee; @Override public void handleReq() { adaptee.request(); } public Adapter(Adaptee adaptee) { super(); this.adaptee = adaptee; } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.lp.adpater; //客户端类 //相当于一个笔记本电脑,只有usb接口 public class Client { public void test1(Target t){ t.handleReq(); } public static void main(String[] arg){ Client c = new Client(); Adaptee a = new Adaptee(); Target t = new Adapter(a); c.test1(t); } }
工作中的场景:
-- 经常用来做旧系统改造和升级
-- 如果我们的系统开发之后再也不需要维护,那么很多模式都是没必要的,但是不幸的是,事实却是维护一个系统的代价往往是开发一个系统的数倍
学习中的场景用到适配器模式的:
-- java.io.InputStremReader(InputStream)
-- java.io.OutputStremReader(OutputStream)