设计模式---结构型模式之适配器模式(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上,一方 ...
随机推荐
- poj2528 Mayor's posters(线段树区间修改+特殊离散化)
Description The citizens of Bytetown, AB, could not stand that the candidates in the mayoral electio ...
- redis事务与关系型数据库事务比较
redis 是一个高性能的key-value 数据库.作为no sql 数据库redis 与传统关系型数据库相比有简单灵活.数据结构丰富.高速读写等优点. 本文主要针对redis 在事物方面的处理与传 ...
- 【入门】广电行业DNS、DHCP解决方案详解(三)——DNS部署架构及案
[入门]广电行业DNS.DHCP解决方案详解(三)——DNS部署架构及案 DNS系统部署架构 宽带业务DNS架构 互动业务DNS架构 案例介绍 案例一 案例二 本篇我们将先介绍DNS系统部署架构体系, ...
- springboot使用 @EnableScheduling、@Scheduled开启定时任务
1.在main启动项添加一个注解@EnableScheduling package com.example.springmybatis; import org.mybatis.spring.annot ...
- Springboot国际化信息(i18n)解析
国际化信息理解 国际化信息也称为本地化信息 . Java 通过 java.util.Locale 类来表示本地化对象,它通过 “语言类型” 和 “国家/地区” 来创建一个确定的本地化对象 .举个例子吧 ...
- 连接池你用对了吗?一次Unexpected end of stream异常的排查
能收获什么? 更加了解TCP协议 Redis与客户端关闭连接的机制 基于Apache Common连接池的参数调优 Linux网络抓包 情况简介 近期迁移了部分应用到K8s中,业务开发人员反馈说,会发 ...
- sql server之SQL SELECT INTO 语句
SELECT INTO 语句可用于创建表的备份复件. SELECT INTO 语句 SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO 语句常用于创建表 ...
- Java第三次作业第四题
4. [问题描述]读取一个文本文件in.txt,然后将这个文件的内容,反序写到另一个文件out.txt中. [输入形式]从文件in.txt中读信息. [输出形式]反序内容写入out.txt文件中. [ ...
- LINUX下搭建简单临时的WWW服务器
首先确定是否安装有python: python -V 如果有: cd 到你要开放的文件夹中,然后使用下面的命令可以把 当前文件夹内的所有文件 发布到 8000 端口. python -m Simple ...
- 11 (OC)* CoreImage
coreimage framework 组成 apple 已经帮我们把image的处理分类好,来看看它的结构: 主要分为三部分: 1)定义部分:CoreImage 何CoreImageDefines. ...