构建模式--Adapter模式(JAVA)
适配器模式:
适配器就相当于我们的转接头,比如手机充电器插头(小米和华为的手机充电器不能共用,这时候就可以给华为的充电器按一个转接头,就可以给小米手机充电)。
同理,当一个类(充电器 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)的更多相关文章
- Abstract Server模式,Adapter模式和Bridge模式
简易的台灯 Abstract Server模式 谁拥有接口. 接口属于它的客户,而不是它的派生类. 接口和客户之间的逻辑关系,强于接口和其派生类的逻辑关系. 逻辑关系和实体关系的强度是不一致的.在实体 ...
- 从Decorator,Adapter模式看Java的IO库
我想任何一本介绍模式的书在讲到Decorator模式的时候不能不提到它的实际应用--在Java/IO库里面的应用,<<Java与模式>>这本书也不例外,有点不一样的是,这本书在 ...
- java设计模式—Adapter模式
1.核心意图: 将一个类的接口转换成客户希望的另外一个接口,从而使得原本由于接口不兼容而不能一起工作的类可以一起工作. 该模式的目标是通过一个代理(这里是Adapter),在原来的类(Adap ...
- Java设计模式(9)适配器模式(Adapter模式)
适配器模式定义:将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份. 为何使用适配器模式 我们经常碰到要将两个没有关系的类组合在一起使用 ...
- java演示适配器(adapter)模式
为什么要使用模式: 模式是一种做事的一种方法,也即实现某个目标的途径,或者技术. adapter模式的宗旨就是,保留现有类所提供的服务,向客户提供接口,以满足客户的需求. 类适配器:客户端定义了接口并 ...
- Java 实现适配器(Adapter)模式
平时我们会常常碰到这种情况,有了两个现成的类,它们之间没有什么联系.可是我们如今既想用当中一个类的方法.同一时候也想用另外一个类的方法.有一个解决方法是.改动它们各自的接口.可是这是我们最不愿意看到的 ...
- 设计模式学习笔记-Adapter模式
Adapter模式,就是适配器模式,使两个原本没有关联的类结合一起使用. 平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类 ...
- 设计模式之(二)Adapter模式
今天学习Adapter模式,An adapter helps two incompatible interfaces to work together. This is the real world ...
- 设计模式之Adapter模式
说起Adapter,STL里的stack和queue都是adapter,底层是deque,隐藏了deque的一些接口,使得其可以达到FIFO是queue,LIFO是stack. The STL sta ...
随机推荐
- 查看app日志的方法
可以打开SDk里面的 ddms.bat 查看日志 路径: android-sdk-macosx/tools/ddms SDK下载的地址: http://www.androiddevtools.cn/ ...
- Flume监听文件目录sink至hdfs配置
一:flume介绍 Flume是一个分布式.可靠.和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能 ...
- BGP属性+13条选路原则(转载)
原文:http://blog.sina.com.cn/s/blog_be409c2f0102x6sg.html BGP(Border Gateway Protocol)边界网关协议 BGP(Borde ...
- Making a view in a listview invisible android
问题: I have a ListView that's using a custom adapter. I want to dynamically add/remove items from the ...
- CTF PHP文件包含--session
PHP文件包含 Session 首先了解一下PHP文件包含漏洞----包含session 利用条件:session文件路径已知,且其中内容部分可控. 姿势: php的session文件的保存路径可以在 ...
- window.open打开新窗口报错ie 位指明错误,原因是window没有加引号!
function JsMod(htmlurl,tmpWidth,tmpHeight){ htmlurl=getRandomUrl(htmlurl); var newwin = window.open( ...
- Angular2 入门详解
AngularJS 2 快速入门 npm是什么? npm其实是Node.js Package Manager的简称,是Node.js包管理工具(package manager) 安装Node.js ...
- (转)Linux中设置服务自启动的三种方式
有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务 主要用三种方式进行这一操作: ln -s 在/etc/rc.d/rc*.d目录中建立/e ...
- CRM stringmap
CREATE view [dbo].[V_stringmap] as SELECT DISTINCT Entity.Name as tablename,StringMap.AttributeName ...
- C#存储过程中return参数
//1 连接字符串 string connectionString = "server=127.0.0.1;integrated security=true;database=MSPetSh ...