设计模式---结构型模式之适配器模式(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上,一方 ...
随机推荐
- hdu6354 杭电第五场 Everything Has Changed 计算几何
Everything Has Changed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java ...
- 徐州邀请赛 江苏 icpc I. T-shirt 矩阵快速幂
题目 题目描述 JSZKC is going to spend his vacation! His vacation has N days. Each day, he can choose a T-s ...
- Python---网络爬虫初识
1. 网络爬虫介绍 来自wiki的介绍: 网络爬虫(英语:web crawler),也叫网上蜘蛛(spider),是一种用来自动浏览万维网的网络机器人. 但是我们在写网络爬虫时还要注意遵守网络规则,这 ...
- 数论---GCD(最大公约数)+LCM(最小公倍数)
#include<bits/stdc++.h> #define ll long long using namespace std; /* ll gcd(ll a, ll b) {//非递归 ...
- MySql连接笔记
一.内连接查询 inner join 关键字:inner join on 语句:select * from a_table a inner join b_table b on a.a_id = ...
- ubuntu下安装rtl8811cu/rtl8821cu网卡 Tplink WDN5200H网卡
博客园第一篇博客,CSDN现在让人眼花缭乱了 @_@ 由于需要wifi调试,笔记本内置的网卡有点不太灵光,买了个TPLINK的WDN5200H AC网卡,给虚拟机用,折腾一下成功了github上有rt ...
- SSM框架学习笔记(一)
Spring框架 Spring :是一个开源框架,起初是为解决企业应用开发的复杂性而创建的,但是现在已经不止 企业级应用开发,Spring的核心就是提供了一个轻量级的控制反转和面向切面编程. SPri ...
- 基于Python的多线程与多进程
1.I/O密集型与计算密集型 多进程适用于I/O密集型 多进程适用于计算密集型 2.没有sleep(T)的多个死循环只能用多进程 3.模块介绍: 1)threading模块(_thread模块已淘汰) ...
- PythonI/O进阶学习笔记_5.python的set和dict
前言: 我一直觉得对我来说学习知识很忌讳不系统.本篇内容与上一篇 自定义序列类是有联系的. 上一篇比较通范的了解了序列类的一些协议和特性,并且有些list的内容.这篇更加具体到set和dict这两个序 ...
- android小工具-系统音量管理器
简介:调节系统音量的小工具,能够快捷的调节系统铃声,媒体音乐.闹钟和通话声音.你可能会想,手机自带的音量键还不够快捷吗?还得写个程序?首先,用音量键调音只能调节一种声音,像闹钟这种声音不能直接调.其次 ...