1、结构型模式
- 核心作用
是从程序的结构上实现送耦合,从而可以扩大整体的类结构,来解决更大的问题。 - 分类
适配器模式、代理模式、桥接模式、装饰模式、组合模式、外观模式、亨元模式
2、适配器模式
1、生活中的场景
转接头之类的
2、什么是适配器模式?
- 将类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
3、模式中的角色
- 目标接口(Target):客户所期待的接口。目标是可以具体的或抽象的类,也可以是接口。
- 需要适配的类(Adapter):需要适配的类或适配者类。
- 适配器(Adapter):通过包装一个需要适配的对象。把原接口转换成目标接口。
4、实例
① 类适配方式
被适配类
* 被适配的类
*/
public class Adaptee {
public void request(){
System.out.println("可以完成客户需要的功能");
}
}
目标接口
public interface Target {
void handleRequest();
}
适配器类
* 适配器类(转接器)
* 类适配方式,但是类只能单继承不利于扩展
*/
public class Adapter extends Adaptee implements Target{
@Override
public void handleRequest() {
super.request();
}
}
测试
* 客户端类
*/
public class Client {
public void test(Target target){
target.handleRequest();
}
public static void main(String[] args) {
Client c = new Client();//客户端
Adaptee a = new Adaptee();//被适配类
Target t = new Adapter();//目标类(适配类)
c.test(t);
}
}
② 对象适配方式
适配器
* 对象适配方式
*/
public class Adapter2 implements Target{
private Adaptee adaptee;
@Override
public void handleRequest() {
adaptee.request();
}
public Adapter2(Adaptee adaptee) {
this.adaptee = adaptee;
}
}
测试
* 客户端类
*/
public class Client2 {
public void test(Target target){
target.handleRequest();
}
public static void main(String[] args) {
Client2 c = new Client2();//客户端
Adaptee a = new Adaptee();//被适配类
Target t = new Adapter2(a);//目标类(适配类)
c.test(t);
}
}
5、工作中的场景
- 经常用来做旧系统改造和升级
- 如果我们的系统开发之后再也不需要维护,那么很多模式都是没有必要的,但是不幸的是,事实确实维护一个系统的代价往往是开发一个系统的数倍。
6、学习中见过的场景
- java.io.InputStreamReader(InputStream)
- java.io.OutputStreamWriter(OutputStream)