JAVA适配器模式(从现实生活角度理解代码原理)
说道JAVA中的适配器模式,不得不引用该设计模式的固定表述“适配器模式(Adapter ):将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作”。该模式其实类似于90年代那会的稳压器,当时的电压没有现在这样稳定,看电视的时候经常会出现闪屏的现象,为此爷爷专门通过工作关系渠道搞到全村第一台稳压器(见下图,哎老爷子拍照之前也不说弄弄干净
,大伙凑合看下),从此开启了童年里幸福的观影时光。

现在21世纪了,除了老旧的稳压器外,各种各样的适配器已经是随处可见了(各种手机充电适配器,电脑电源适配器等等),这里为了方便大家理解,我们用做常用的电脑电源适配器来讲解今天的设计模式,首先要明确的是在这整个过程中我们只有三个具体的对象,分别是电源(插座)、适配器,电脑(电池)。下来我们开始撸代码:
/*首先我们需要建立一个电源(插板)的接口,并提供对应方法
* (之所用接口是为了方便适配器实现)
*/
interface Power{
public void electric();
}
//首先我们需要建立一个电脑的接口,并提供对应方法
interface Computer{
public void battery();
}
//建立分别实现两个接口的类
class PowerImpl implements Power{
@Override
public void electric() {
System.out.println("我有电");
}
}
class ComputerImpl implements Computer{
@Override
public void battery() {
System.out.println("我有电池");
}
}
/*
* 建造适配器(这里我个人认为作为适配器,应该同时实现他所连接的两个接口
* ,在这里就是电源和电脑的接口)
*/
class Adapter implements Power,Computer{
/*适配器中声明名两个接口,并分别建立构造方法
* (适配器中应该有支持两种接口的模块)
*/
Power power;
Computer computer; public Adapter(Power power) {
super();
this.power = power;
}
public Adapter(Computer computer) {
super();
this.computer = computer;
}
/*适配器核心代码:
* 可以理解为要实现电脑电池充电的方法,就必须调用电源的电方法。
* 同理在这个过程中电源的电要实现自身价值,就必须调用电脑的电池。
*/
@Override
public void battery() {
power.electric();
}
@Override
public void electric() {
computer.battery();
}
}
测试类一:这里模拟在有电的情况下(即适配器一端已经连接电源插板),通过适配器调用电脑电池的过程
public class AdapterDemo {
public static void main(String[] args) {
Computer computer = new ComputerImpl();//实例化Computer(父类引用指向子类对象)
Adapter a = new Adapter(computer);//实例化适配器,可以理解为将另外一端连接到电脑的过程
method(a);
}
//静态方法(已经提供了电)
public static void method(Power p){
p.electric();
}
}
输出结果:
我有电池
测试类二:这里模拟在有电脑(电池)的情况下(即适配器一端已经连接电脑),通过适配器调用power的过程
public class AdapterDemo1 {
public static void main(String[] args) {
Power power = new PowerImpl();//实例化Power(父类引用指向子类对象)
Adapter a = new Adapter(power);
method(a);
}
//静态方法(已经提供了电脑)
public static void method(Computer c){
c.battery();
}
}
输出结果:
我有电
这里写的比较规矩,方便初学者理解,大家也可以通过匿名内部类来简化(优化)这段代码,祝大伙撸的开心
。
JAVA适配器模式(从现实生活角度理解代码原理)的更多相关文章
- JAVA装饰者模式(从现实生活角度理解代码原理)
装饰者模式可以动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 该模式的适用环境为: (1)在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职 ...
- JAVA简单工厂模式(从现实生活角度理解代码原理)
简单工厂模式(Simple Factory),说他简单是因为我们可以将此模式比作一个简单的民间作坊,他们只有固定的生产线生产固定的产品.也可以称他为静态工厂设计模式,类似于之前提到过静态代理设计模式, ...
- JAVA动态代理模式(从现实生活角度理解代码原理)
所谓动态代理,即通过代理类:Proxy的代理,接口和实现类之间可以不直接发生联系,而可以在运行期(Runtime)实现动态关联. java动态代理主要是使用java.lang.reflect包中的两个 ...
- JAVA静态代理模式(从现实生活角度理解代码原理)
代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问. 代理模式说白了就是"真实对象"的代表,在访问对象时引入一定程度的间接性,因为这种间接性可以附加多种用途. 在 ...
- JAVA模板方法设计模式(从现实生活角度理解代码原理)
概述: 定义一个功能的框架(骨架),一部分功能是确定的,一部分功能是不确定的,先把确定的部分实现,把不确定的部分延迟到子类中实现. 实现该模式的关键步骤: 第一步:抽象类,实现模板方法,定义功能(确定 ...
- 【C#硬件角度理解代码】函数
函数的执行过程
- 从tcp原理角度理解Broken pipe和Connection reset by peer的区别
从tcp原理角度理解Broken pipe和Connection reset by peer的区别 http://lovestblog.cn/blog/2014/05/20/tcp-broken-pi ...
- 从Java角度理解Angular之入门篇:npm, yarn, Angular CLI
本系列从Java程序员的角度,带大家理解前端Angular框架. 本文重点介绍Angular的开发.编译工具:npm, yarn, Angular CLI,它们就像Java在中的Maven,同时顺便介 ...
- Java并发编程之深入理解线程池原理及实现
Java线程池在实际的应用开发中十分广泛.虽然Java1.5之后在JUC包中提供了内置线程池可以拿来就用,但是这之前仍有许多老的应用和系统是需要程序员自己开发的.因此,基于线程池的需求背景.技术要求了 ...
随机推荐
- HttpClient异步调用WEB服务
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...
- .Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建
闲来没事做,还是想再学习一门新的技术,无论何时Android开发比Web的开发工资应该高40%,我也建议大家面对移动开发,我比较喜欢学习最新版本的,我有java的基础,但是年久,已经淡忘,以零基础学习 ...
- 【原创】开源Math.NET基础数学类库使用(17)C#计算矩阵条件数
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 上个月 ...
- 清除页面广告?身为前端,自己做一款简易的chrome扩展吧
大家肯定有这样的经历,浏览网页的时候,左右两端广告,诸如“屠龙宝刀,点击就送”,以及最近火的不行的林子聪37传奇霸业什么“霸业面具,霸业吊坠”的魔性广告总是充斥我们的眼球. 当然有现成的扩展程序或者插 ...
- Deadlock Detecting--转
/* Java Threads, 3rd Edition By Scott Oaks, Henry Wong 3rd Edition September 2004 ISBN: 0-596-00782- ...
- 将Excel文件转换为Html
将Excel文件转换为HTML 背景 我的工作有时会涉及到财务数据的处理.我们大家都知道,Excel文件在处理数据中很流行并且被广泛使用.Excel让我们可以将存储在里面的数据进行数学计算.我在工作中 ...
- Spring笔记--xml配置文件详解
1:bean的基本属性配置: <!-- id是bean的标识符,必须唯一,如果没有配置id,name默认为标识符 如果配置了id,有配置了name,那么name为别名 name可以设置多个别名, ...
- SqlServer基础之(触发器)
概念: 触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触 ...
- 一步一步开发Game服务器(二)登陆2
上一篇文章,讲解了简单的登陆情况.接下来我们继续讲解登陆模块. 在正常的游戏服务器情况下.在尚未登录前可以查看服务器大区情况,登陆后也可以查看服务器大区情况,然后选择大区服务器.进行登录操作. 这样的 ...
- 由面试引发的思考:B/S与C/S究竟是何物
一.现状说明: 就在这金三银四的求职黄金时期,我有幸作为公司的独立技术面试官,拥有最终决定录用权,在倍受上级领导的充分信任下,我也向上级保证,一定要为公司找到合适的人才,就在我满怀信心的情况下面试了一 ...