博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
适配器模式
阅读量:5953 次
发布时间:2019-06-19

本文共 2123 字,大约阅读时间需要 7 分钟。

1.     现实生活中有很多原来的东西和目标的东西不匹配,但是你还要去用,那么这时候怎么办呢,就需要一个东西,是原来的东西能够被目标东西所使用,这就是适配器,也是体现它的价值的地方,例如两头插座和三孔插座,两头插头需要这个三孔插座变成两空插头从而能够使用,这时候来个转化器既可以使用了,这个转化器就是适配器,它能够实现三孔插座变成两孔从而能够使用。

2.     所以适配器涉及三个角色:

目标角色

源角色

适配器角色

3.     适配器让目标使用源的方法,所以需要实现目标接口,重构接口方法,调用源接口的方法(由于调用的方式不一样,分为:类适配(继承),对象适配(依赖组合))

4.     代码实现

源接口

package adaptmodel;public interface SourceInter {    public void ThreeHoles();}

 

源实现类

package adaptmodel; public class ThreeHoles implements SourceInter {     @Override    public void ThreeHoles() {       // TODO Auto-generated method stub           System.out.println("使用三孔充电");    }}

 

目标接口

package adaptmodel; public interface TargetInter {    public void TwoHead();}

 

目标实现类

package adaptmodel; public class Twoheads implements TargetInter {    @Override    public void TwoHead() {       // TODO Auto-generated method stub        System.out.println("用两头充电");    }}

 

类适配器

package adaptmodel;/** * 这里使用类适配器通过继承实现,但是这里没有对象适配器灵活 * @author Administrator * */public class Adapt2 extends ThreeHoles implements TargetInter {    @Override    public void TwoHead() {       // TODO Auto-generated method stub       super.ThreeHoles();    }}

 

对象适配器

package adaptmodel; /** * 适配器能够提供目标客户想要的接口,所以需要重构目标接口的方法, * 从而来调用源接口的方法(这里是对象适配器,优点:可以提供所接口以及子接口的重构的方法) * @author Administrator * */public class Adapt implements TargetInter {        private SourceInter sourceInter;    Adapt(SourceInter sourceInter){        this.sourceInter = sourceInter;    }    @Override    public void TwoHead() {       // TODO Auto-generated method stub       sourceInter.ThreeHoles();    }}

 

测试

package adaptmodel; public class TestAdapt {    public static void main(String[] args) {       // TODO Auto-generated method stub       /*        * 这里其实目标和源不是直接打交道的,是adpat实现了源的功能,然后目标通过adapt使用源的功能        */       //使用has a的形式,对象适配器       TargetInter targetinter=new Adapt(new ThreeHoles());       targetinter.TwoHead();       //is a的形式 类适配器       TargetInter targetInter2=new Adapt2();       targetInter2.TwoHead();    }}

 

5.     可以看出适配器适合的场景

就是接口不一致,但是又想使用,

1) 现有系统和源系统接口不一致

2) 使用接口不一致的api

6.     适配器的缺点:

重新构建新的适配器比较麻烦

7.     实例:

.net dataAdap

转载于:https://www.cnblogs.com/grows/p/7286265.html

你可能感兴趣的文章
大换血的代价
查看>>
Learn in FCC(3)
查看>>
RunLoop--
查看>>
chrome 2行换行省略号 ... text-ellipse
查看>>
C语言第四次作业
查看>>
Java学习-集合的理解
查看>>
iOS验证码倒计时(GCD实现)
查看>>
iOS中的过滤器和正则表达式(NSPredicate,NSRegularExpression)
查看>>
canvas和svg
查看>>
结对:复利美化版
查看>>
HDU_2689_Sort it
查看>>
urllib模块使用笔记
查看>>
mysql 连接慢的问题(超过了1秒)
查看>>
1297. [SCOI2009]迷路【矩阵乘法】
查看>>
Linux嵌入式GDB调试环境搭建
查看>>
java分析jvm常用指令
查看>>
【Linux】Linux 在线安装yum
查看>>
oracle 管理操作 (转)
查看>>
DEV 等待窗口
查看>>
实验03博客园总结
查看>>