适配器模式
来源:互联网 发布:小语网络加速器 编辑:程序博客网 时间:2024/06/03 18:08
适配器模式的定义:就是将一个类的接口,转化为期望中的另外一个接口,使得由于接口不兼容而不能一起工作的那些类可以一起工作。
笔记本电脑的插头一般都是三相的,即除了阳极、阴极外,还有一个地极.而有些地方的电源插座却只有两极,没有地极.电源插座与笔记本电脑的电源插头不匹配使得笔记本电脑无法使用,这时候一个三相到两相的转换器(适配器)就能解决此问题,而这正像是本模式所做的事情.适配器模式的结构:目标(Target)角色:这就是所期待得到的接口,由于这里讨论的是类适配器模式,因此目标不可以是类.源(Adaptee)角色:被适配的接口(可以是接口或者类).适配器(Adapter)角色:适配器类是本模式的核心,适配器把源接口转换成目标接口,显然这一角色不可以是接口,而必须是具体类,实现源接口.适配器模式有类的适配器模式和对象的适配器模式两种不同的形式.1.ThreePlugIf接口/** 三相插座接口*/public interface ThreePlugIf {//使用三相电流供电public void powerWithThree();}2.GBTwoPlug.java(GB两厢插口)public class GBTwoPlug {//使用二相电流供电public void powerWithTwo(){System.out.println("使用二相电流供电");}}3.TwoPlugAdapter.java/** 二相转三相的插座适配器*/public class TwoPlugAdapter implements ThreePlugIf {private GBTwoPlug plug;public TwoPlugAdapter(GBTwoPlug plug){this.plug = plug;}@Overridepublic void powerWithThree() {//重写原来的方法,调用适配的方法System.out.println("通过转化");plug.powerWithTwo();}}4.NoteBook.javapublic class NoteBook {private ThreePlugIf plug;public NoteBook(ThreePlugIf plug){this.plug = plug;}//使用插座充电public void charge(){plug.powerWithThree();}public static void main(String[] args) {GBTwoPlug two = new GBTwoPlug();ThreePlugIf three = new TwoPlugAdapter(two);NoteBook nb = new NoteBook(three);nb.charge();three = new TwoPlugAdapterExtends();nb = new NoteBook(three);nb.charge();}}
适配器分类1、组合采用组合方式的适配器成为对象适配器特点:把“被适配者”作为一个对象组合到适配器类中,以修改目标接口包装被适配者被适配者的任何子类都能被此适配器适配。2、继承采用继承方式的称为类适配器特点:通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类而实现适配java单继承,适配器不能继承被适配者的任何子类。因此代码可重用性要差些。适配器作用1.透明2.重用3.低耦合
0 0
- 适配器及适配器模式
- 适配器及适配器模式
- 适配器模式(类适配器)
- 适配器模式(默认适配器)
- 适配器模式(对象适配器)
- 适配器模式-类适配器
- 适配器模式-对象适配器
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- HTML5之WebSoket——html5+java servlet实现
- phpstorm激活方法
- 【codeforces 721C】【DAG 按照拓扑排序记忆化DFS】C. Journey 【DAG图,5000个点,5000条边 让你求从1到n的路径长度不超过T中经过点数最多的一条 】
- HDU 5833 Zhu and 772002(异或方程组高斯消元)
- LeetCode 405 Convert a Number to Hexadecimal
- 适配器模式
- (Java)LeetCode-50. Pow(x, n)
- Python:class类
- forward和param动作
- linux 终端命令大全
- 动态链接库的使用
- cglib代理
- C++/STL bitset
- 自己DIY一个智能家居模型框架--DHT11驱动