GOF23设计模式之适配器模式

结构型模式:

核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。

分类:适配器模式、代理模式、桥接模式、装饰模式、组合模式、外观模式、享元模式

什么是适配器模式?

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

模式中的角色

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

需要适配的类(Adaptee):需要适配的类或适配者类。

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

package cn.taosir.design.structure.adapter;

public class AdapterDemo {
public void test(Target t) {t.handleReq();}
public static void main(String[] args) {
AdapterDemo ad=new AdapterDemo();
Adaptee adaptee=new Adaptee(); //类适配器方式
//Target t=new Adapter(); //对象适配器方式
Target t=new Adapter2(adaptee); ad.test(t);
}
} /**
* 被适配的类
*/
class Adaptee{
public void request() {System.out.println("可以完成客户请求的需要的功能!");}
} interface Target{
void handleReq();
} /**
* 适配器(类适配器方式)
*/
class Adapter extends Adaptee implements Target{
@Override
public void handleReq() {
super.request();
}
} /**
* 适配器(对象适配器方式)
*/
class Adapter2 implements Target{ private Adaptee adaptee; @Override
public void handleReq() {
adaptee.request();
} public Adapter2(Adaptee adaptee) {
super();
this.adaptee=adaptee;
}
}

工作中的场景

1)经常用来做旧系统改造和升级

2)如果我们的系统开发之后再也不需要维护,那么很多模式都是没必要的,但是不幸的是,事实却是维护一个系统的代价往往是开发一个系统的数倍。

我们学习中见过的场景

1)java.io.InputStreamReader(InputStream)

2)java.io.OutputStreamWriter(OutputStream)

最新文章

  1. c++ 解包tar
  2. jQuery漂亮图标的垂直导航菜单
  3. hadoop +zookeeper + hbase 单节点安装
  4. Java-LinkedHashSet
  5. javascript之值传递与引用传递
  6. 从Search Sort到Join
  7. oracle,wamp,FZ突然出现问题,求解决方案(未解决,最终系统还原)
  8. OSCHina技术导向:web内容管理系统Magnolia
  9. 第13章 Swing程序设计----常用面板
  10. HDU 2389 Rain on your Parade 最大匹配(模板题)【HK算法】
  11. loadrunner 脚本优化-加密与解密
  12. Luogu P3462 [POI2007]ODW-Weights
  13. ES6 import
  14. Python根据路径名称获取文件的名称以及所在的路径
  15. Spring ApplicationContext(十)finishRefresh
  16. POJ1274 The Perfect Stall
  17. WPF 之 创建继承自Window 基类的自定义窗口基类
  18. mysql 数据库自动备份
  19. js-jquery-从SweetAlert到SweetAlert2
  20. 433. Number of Islands【LintCode java】

热门文章

  1. linux sed 命令,sed -i
  2. Codeforces--633D--Fibonacci-ish(暴力搜索+去重)(map)
  3. sublime -text 删除已安装插件
  4. Java 8 实战 P1 Fundamentals
  5. 排序系列 之 归并排序算法 —— Java实现
  6. html5的Form新特性
  7. pjax使用小结
  8. 一个对象toString()方法如果没有被重写,那么默认调用它的父类Object的toString()方法,而Object的toString()方法是打印该对象的hashCode,一般hashCode就是此对象的内存地址
  9. Django分页器及自定义分页器
  10. .Net Core添加分布式Session