适配器模式:

适配器就相当于我们的转接头,比如手机充电器插头(小米和华为的手机充电器不能共用,这时候就可以给华为的充电器按一个转接头,就可以给小米手机充电)。

同理,当一个类(充电器 HuaweiCharger)实现了某一个接口(华为 HuaweiPhone),但有时我们又需要去实现另一个接口(小米 XiaomiPhone),如果直接让充电器去实现小米接口,就需要实现小米接口中的方法,如果充电器类已经被打到一个包中,这时候修改就比较困难,也违反开闭原则(扩展开,修改闭)。因此我们就需要建立一个适配器类(HTXAdapter Huawei Transform Xiaomi Adapter)去实现小米接口,同时又继承自充电器类。

 /**
* 华为手机接口
*
* @author DennyZhao
* @date 2017年6月20日
* @version 1.0
*/
public interface HuaweiPhone { public int getSquarePlug(); public int getSquareInterface(); public void getAndroidSys(); public void getHuaweiInput(); public void getInterCpu(); public void getInterBoard(); }

HuaweiPhone

 /**
* 小米手机
*
* @author DennyZhao
* @date 2017年6月20日
* @version 1.0
*/
public interface XiaomiPhone { public int getCirclePlug(); public int getCircleInterface(); public void getAndroidPlusSys(); public void getXiaomiInput(); public void getAMDCpu(); public void getAMDBoard();
}

XiaomiPhone

 /**
* 华为充电器
*
* @author DennyZhao
* @date 2017年6月20日
* @version 1.0
*/
public class HuaweiCharger extends HuaweiPhoneImpl implements HuaweiPhone{ @Override
public int getSquarePlug() {
System.out.println("squarePlug----------");
return 0;
} @Override
public int getSquareInterface() {
System.out.println("squareInterface----------");
return 0;
} }

HuaweiCharger

 /**
* description:设计原则讲究扩展开,修改闭。因此当我们需要将一个类去实现另一个接口时,可以通过创建子类去实现这个接口。
*
* @author DennyZhao
* @date 2017年6月12日
* @version 1.0
*/
public class HTXAdapter extends HuaweiCharger implements XiaomiPhone{ /**
* 小米适配
*/
@Override
public int getCirclePlug() {
int a = super.getSquarePlug();
return a+ 5;
} /**
* 小米适配
*/
@Override
public int getCircleInterface() {
int b = super.getSquareInterface();
return b + 4;
}
@Override
public void getAndroidPlusSys() {
// TODO Auto-generated method stub } @Override
public void getXiaomiInput() {
// TODO Auto-generated method stub } @Override
public void getAMDCpu() {
// TODO Auto-generated method stub } @Override
public void getAMDBoard() {
// TODO Auto-generated method stub } }

HTXAdapter

通过上面的代码就可以知道,HTXAdaper实现了Xiaomi接口的所有方法,这样就不会污染HuaweiCharger了。随时不用可以去掉。插拔式结构。

构建模式--Adapter模式(JAVA)的更多相关文章

  1. Abstract Server模式,Adapter模式和Bridge模式

    简易的台灯 Abstract Server模式 谁拥有接口. 接口属于它的客户,而不是它的派生类. 接口和客户之间的逻辑关系,强于接口和其派生类的逻辑关系. 逻辑关系和实体关系的强度是不一致的.在实体 ...

  2. 从Decorator,Adapter模式看Java的IO库

    我想任何一本介绍模式的书在讲到Decorator模式的时候不能不提到它的实际应用--在Java/IO库里面的应用,<<Java与模式>>这本书也不例外,有点不一样的是,这本书在 ...

  3. java设计模式—Adapter模式

    1.核心意图:     将一个类的接口转换成客户希望的另外一个接口,从而使得原本由于接口不兼容而不能一起工作的类可以一起工作. 该模式的目标是通过一个代理(这里是Adapter),在原来的类(Adap ...

  4. Java设计模式(9)适配器模式(Adapter模式)

    适配器模式定义:将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份. 为何使用适配器模式 我们经常碰到要将两个没有关系的类组合在一起使用 ...

  5. java演示适配器(adapter)模式

    为什么要使用模式: 模式是一种做事的一种方法,也即实现某个目标的途径,或者技术. adapter模式的宗旨就是,保留现有类所提供的服务,向客户提供接口,以满足客户的需求. 类适配器:客户端定义了接口并 ...

  6. Java 实现适配器(Adapter)模式

    平时我们会常常碰到这种情况,有了两个现成的类,它们之间没有什么联系.可是我们如今既想用当中一个类的方法.同一时候也想用另外一个类的方法.有一个解决方法是.改动它们各自的接口.可是这是我们最不愿意看到的 ...

  7. 设计模式学习笔记-Adapter模式

    Adapter模式,就是适配器模式,使两个原本没有关联的类结合一起使用. 平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类 ...

  8. 设计模式之(二)Adapter模式

    今天学习Adapter模式,An adapter helps two incompatible interfaces to work together. This is the real world ...

  9. 设计模式之Adapter模式

    说起Adapter,STL里的stack和queue都是adapter,底层是deque,隐藏了deque的一些接口,使得其可以达到FIFO是queue,LIFO是stack. The STL sta ...

随机推荐

  1. 切换了webview 定位不了的解决方法 (还没有试,记录在此)

    # 切换到 webview time.sleep(2) print(driver.contexts) driver.switch_to.context('WEBVIEW_com.tencent.mm: ...

  2. Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs

    ylbtech-Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs 1.返回顶部 1. Java 实例 - 重载(ove ...

  3. OpenStack存储(单节点)

    一.OpenStack Swift对象存储 1.安装Swift服务 在controller节点依次执行iaas-install-swift-controller.sh和iaas-install-swi ...

  4. centos6.8下pptp客户端的安装配置

    原文: https://blog.csdn.net/zhang11321132/article/details/20612473 yum -y install ppp pptp pptp-setup ...

  5. static--Android静态变量使用陷阱

     相关资料:http://blog.csdn.net/ctcwri/article/details/8858414                     http://blog.csdn.net/w ...

  6. [UE4]打包EXE

    Building configuration 1.Development:开发模式.不会压缩文件 2.Shipping,成品模式.移动版本会自动压缩文件

  7. Maven项目下update maven后Eclipse报错

    Maven项目下update maven后Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderL     严重: Error config ...

  8. MySQL 之 mysqlbinlog解析binlog乱码问题解密

    发现mysql库的binlog日志出来都是乱码,如下所示: BINLOG ’ IXZqVhNIAAAALQAAAGcBAAAAAHoAAAAAAAEABHRlc3QAAno0AAEDAABUOcnY ...

  9. Linux之间用SSH传输文件 一行命令实现

    把本机的文件传到目标: cd /home/ && tar czv test | ssh root@HostIP -p 22 'tar xz' 解释: 如你所见,这行命令其实由多个命令组 ...

  10. CS229 6.4 Neurons Networks Autoencoders and Sparsity

    BP算法是适合监督学习的,因为要计算损失函数,计算时y值又是必不可少的,现在假设有一系列的无标签train data:  ,其中 ,autoencoders是一种无监督学习算法,它使用了本身作为标签以 ...