设计模式---结构型模式之适配器模式(Adapter Pattern)
- 适配器模式定义
将一个类的接口,转换成客户期望的另外一个接口。适配器让原本接口不兼容的类可以合作无间。
适配器模式主要有两种类型:对象适配器和类适配器。
在详细解释这两种类型时,解释部分重要角色。生活中使用的笔记本电脑,都有电源适配器,这个电源适配器的作用就是将标准电压220V交流电转变为低压直流电,供电脑充电的一种装置。这个装置便是适配器模式中的适配器角色,而标准电压220V交流电便是电源(我们也可以简称为适配者对象),笔记本通过电源适配器,可以获取到适合自己使用的低压直流电,而不需要更改厂商的API,这就是适配器作用最大的地方。
- 对象适配器
该种类型主要使用组合方式实现,适配器对象内部使用组合方式调用被适配者对象。
package adapterpattern;
/**
* 220V电压提供者
* @author Administrator
*/
public class Adaptee {
/**
* 提供220V标准电压
* @return
*/
public int provideStandardVol(){
return 220;
}
}
package adapterpattern; /**
* 电源适配器目标接口,可以适配多种不同标准的笔记本
* @author Administrator
*
*/
public interface Target {
public int getFitnessVol();
}
package adapterpattern; /**
* 电源适配器的实现
* @author Administrator
*/
public class ObjcetTypeAdaptor implements Target{
Adaptee adaptee;
public ObjcetTypeAdaptor(Adaptee adaptee){
this.adaptee = adaptee;
}
/**
* 获取笔记本所需要的标准电压
* @return
*/
public int getFitnessVol(){
int tmpVol = adaptee.provideStandardVol();
System.out.println("获取标准电压:[" + tmpVol + "V]");
System.out.println("Adaptor准备转换成适配电压");
//此处为简单示例 TODO
tmpVol = 19;
System.out.println("Adaptor转换成适配电压[" + tmpVol + "V]");
return tmpVol; }
}
- 类适配器
该种类型主要使用继承方式实现。适配器对象通过继承来调用被适配器对象方法。
package adapterpattern;
public class ClassTypeAdaptor extends Adaptee implements Target{
/**
* 获取笔记本所需要的标准电压
* @return
*/
public int getFitnessVol() {
int tmpVol = provideStandardVol();
System.out.println("获取标准电压:[" + tmpVol + "V]");
System.out.println("Adaptor准备转换成适配电压");
//此处为简单示例 TODO
tmpVol = 19;
System.out.println("Adaptor转换成适配电压[" + tmpVol + "V]");
return tmpVol;
}
}
package adapterpattern; /**
* 笔记本对象
* @author Administrator
*
*/
public class Computer {
private Target target; public Computer(Target target){
this.target = target;
} public void working(){
if(null != target && 0 != target.getFitnessVol()){
System.out.println("已插电源适配器,准备工作ing。。。");
}else{
System.out.println("未插电源适配器或电源适配器损坏,无法工作");
}
}
/**
* @param args
*/
public static void main(String[] args) {
//初始化一台标准220V电压
Adaptee adaptee = new Adaptee();
System.out.println("--------------对象适配器分割线开始-------------");
//声明一个电源适配器
Target adaptor1 = new ObjcetTypeAdaptor(adaptee);
//开始构造一台电脑
Computer computer1 = new Computer(adaptor1);
computer1.working();
System.out.println("笔记本1构造完毕,可以启动。。。。");
System.out.println("--------------对象适配器分割线结束-------------");
System.out.println("--------------类适配器分割线开始--------------"); Target adaptor2 = new ClassTypeAdaptor();
Computer computer2 = new Computer(adaptor2);
computer2.working();
System.out.println("笔记本2构造完毕,可以启动。。。。");
System.out.println("--------------类适配器分割线结束--------------");
}
} /**
* 输出:
* --------------对象适配器分割线开始-------------
* 获取标准电压:[220V]
* Adaptor准备转换成适配电压
* Adaptor转换成适配电压[19V]
* 已插电源适配器,准备工作ing。。。
* 笔记本1构造完毕,可以启动。。。。
* --------------对象适配器分割线结束-------------
* --------------类适配器分割线开始--------------
* 获取标准电压:[220V]
* Adaptor准备转换成适配电压
* Adaptor转换成适配电压[19V]
* 已插电源适配器,准备工作ing。。。
* 笔记本2构造完毕,可以启动。。。。
* --------------类适配器分割线结束--------------
*/
- 两种类型适配器的比较
通过以上两个例子:将适合笔记本低压直流电目标类和标准高压交流电的适配者类解耦,通过引入适配器类来改造适配者类,而无需修改适配者类代码。
类适配器模式中类是适配者类的子类,适配器类可以通过重写来构造新的方法,灵活性更强,但是也具有一定局限性:对于不支持多重继承的语言,只能单继承。
对象适配器模式中适配器类通过组合方式来调用适配者类,可以适配多个适配者类。该类型与类适配器模式相比,不能改变适配者的方法。
设计模式---结构型模式之适配器模式(Adapter Pattern)的更多相关文章
- Java设计模式——结构型模式
Java设计模式中共有7种结构型模式:适配器模式.装饰模式.代理模式.外观模式.桥接模式.组合模式.享元模式.其中对象的适配器模式是各种模式的起源,其关系如下面的图:1.适配器模式 适配器模式将某个类 ...
- 设计模式 结构型模式 外观模式(Facade Pattern)
在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化. 这时为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 ”门面“ ...
- java设计模式结构型模式
结构型模式: – 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结 构,用来解决更大的问题 分类: • 适配器模式.代理模式.桥接模式. 装饰模式.组合模式.外观模式.享元模式 结构型模式 ...
- 设计模式-结构型模式,python组合模式
设计模式上大的方向上分继承和组合,就是类模式和对象模式.此篇的组合模式非继承和组合概念中的组合.桥接 策略 代理 装饰者都用了组合,此组合非彼组合. 组合模式 组合模式(Composite Patte ...
- 设计模式-结构型模式,python桥接模式
桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦. 这种模式涉及到一个作为桥接 ...
- c#设计模式·结构型模式
看的过程中,发现好多模式都用过,只是没有总结,或者是不知道叫这个名字吧··· 这里列举结构型模式,适配器.桥接.过滤.组合.装饰器.外观.享元.代理, 适配器模式:将现存的对象放到新的环境里边去,但是 ...
- 结构型模式概述(Structural Pattern)
结构型模式可以描述两种不同的东西:类与类的实例.结构型模式可以分为类结构型模式和对象结构型模式. 类结构型模式关心类的组合,可以由多个类组合成一个更大的系统,在类结构型模式中只存在继承关系和实现关系: ...
- 七个结构模式之适配器模式(Adapter Pattern)
定义: 将一个接口转换为客户需要的另外一个接口,使接口不兼容的类型可以一起工作,也被称为包装器模式(Wrapper Patern). 结构图: Target:目标抽象类,客户所需要的接口. Adapt ...
- Java设计模式(7)——结构型模式之适配器模式(Adapter)
一.概述 概念 其实,举个生活中的例子的话,适配器模式可以类比转接头,比如typeC和USB的转接头,把原本只能接typeC的接口,拓展为可以接普通USB:这里的转接头一方面需要查在typeC上,一方 ...
随机推荐
- Atcoder C - Closed Rooms(思维+bfs)
题目链接:http://agc014.contest.atcoder.jp/tasks/agc014_c 题意:略. 题解:第一遍bfs找到所有可以走的点并标记步数,看一下最少几步到达所有没锁的点,然 ...
- CodeForces 917A The Monster 贪心+思维
As Will is stuck in the Upside Down, he can still communicate with his mom, Joyce, through the Chris ...
- nginx部署成功却没有办法访问
1.首要想到的问题是防火墙没关 注意:因为centos7.0默认不是使用iptables方式管理,而是firewalld方式.CentOS6.0防火墙用iptables管理. 2.解决: ①首先查看防 ...
- springboot整合mybatis(注解)
springboot整合mybatis(注解) 1.pom.xml: <?xml version="1.0" encoding="UTF-8"?> ...
- 小白专场-树的同构-c语言实现.md
目录 一.题意理解 二.求解思路 2.1 二叉树表示 2.2 程序框架搭建 2.3 如何建二叉树 2.4 如何判别两二叉树同构 更新.更全的<数据结构与算法>的更新网站,更有python. ...
- FreeSql (十七)联表查询
FreeSql在查询数据下足了功能,链式查询语法.多表查询.表达式函数支持得非常到位. IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnect ...
- android EditText实现圆弧背景
一.给EditText添加背景,并且4角圆弧 对应的xml 以及样式如下: <EditText android:id="@+id/o_item_num" style=&quo ...
- Winform中设置ZedGraph曲线图的水平与竖直参考线
场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- 基于DevExpress的SpreadsheetControl实现对Excel的打开、预览、保存、另存为、打印(附源码下载)
场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...
- linux 操作系统级别监控 df 命令
df命令可以查看当前系统磁盘空间的使用情况 命令:df -h du -sh * 查看目录文件暂用磁盘大小 如果磁盘空间不够,需清理磁盘 磁盘速度测试,如果磁盘性能不好,性能测试数据会不准确(读写速度) ...