Java设计模式中适配器模式的实现方法
在Java开发中,我们常常需要用到Java接口型模式中的适配器模式,那适配器设计模式到底是什么模式呢?
适配器模式(Adapter)就是把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。举个例子来说,现在一般的家用电器要求的电压都是 220V,但有个别电器要求使用110V 电压,怎么办?这时就需要用一个能把 220V 电压转换成 110V 电压的变压器,这个变压器就是一个适配器。
哪些情况我们需要使用适配器模式呢?
1、系统需要使用的类的接口不符合系统的要求。
2、要建立一个可以重复使用的类,用于与该类之间关联不大的一些类,包括工作中引进的类。
3、类的适配器模式使用起来有点像多重继承机制,利用接口的特性,把一些零散类组织到一起,成为一个新的类来实现调用,并且看起来像是对一个类的操作。实际上,适配器模式更多的是强调对代码的组织,而不是功能的实现。
Java中适配器模式有什么作用呢?
适配器模式可以方便代码的组织与模型的准确表示,可以把一个类中的成员插到另一个类的继承子类中,从而让这个继承的子类看起来像一个新类,同时可以对父类减少依赖。
了解了适配器模式的相关概念以后,我们最关心的还是它的实现,具体的设计过程是怎样的呢?
(1)定义适配器接口。代码如下:
public interface IAdapter
//适配器接口
{
String Drive();
}
(2)定义适配器类 Adapter,实现 IAdapter 接口。代码如下:
public class Adapter implements IAdapter
//适配器类
{
public String Drive()
{
return "变压器";
}
}
(3)定义改变适配器类,该类主要实现将变压器的电压从 110V 改变为 220V。代码如下:
public class ChangeAdapter
//改变适配器类
{
public String Web(String str)
{
return str;
}
}
(4)定义输出电压为 110V 的变压器类。代码如下:
public class CClass extends ChangeAdapter implements IAdapter
//实现类适配器
{
public String Drive()
{
return this.Web("(1)输出电压:110V");
}
}
(5)定义输出电压为 220V 的变压器类。代码如下:
public class CObject implements IAdapter
//实现对象适配器
{
private ChangeAdapter changeAdapter;
public CObject()
{
changeAdapter = new ChangeAdapter();
}
public String Drive()
{
return changeAdapter.Web("(2)输出电压:220V");
}
}
(6)在 main()方法中使用变压器将 110V 的电压变压为 220V。代码如下:
class Program
{
public static void main(String[] args)
{
IAdapter dap = new Adapter();
System.out.println((dap.Drive()));
dap = new CClass();
//调用第一个适配器
System.out.println((dap.Drive()));
dap = new CObject();
//调用第二个适配器
System.out.println((dap.Drive()));
}
}
以上就是Java适配器模式的作用和具体使用方法,大家遇到类似情况时,可以用上面的代码尝试实现适配器模式。最后希望小编的分享,对大家在Java编程中有帮助。
相关阅读:《Java 8 对象类型》
Java设计模式中适配器模式的实现方法的更多相关文章
- Java设计模式之适配器模式(项目升级案例)
今天是我学习Java设计模式中的第三个设计模式了,但是天气又开始变得狂热起来,对于我这个凉爽惯了的青藏人来说,又是非常闹心的一件事儿,好了不管怎么样,目标还是目标(争取把23种Java设计模式接触一遍 ...
- Java设计模式(二) 工厂方法模式
本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...
- JAVA项目中引用Logback的方法
一.简介 本文主要讲JAVA项目中引入Logback的方法. 二.解决 1.引入依赖. <!--Begin LogBack Log--> <!-- https://mvnreposi ...
- Java设计模式中的单例模式
有时候在实际项目的开发中,我们会碰到这样一种情况,该类只允许存在一个实例化的对象,不允许存在一个以上的实例化对象,我们将这种情况称为Java设计模式中的单例模式.设计单例模式主要采用了Java的pri ...
- 【转】使用JavaParser获得Java代码中的类名、方法形参列表中的参数名以及统计总的文件个数与不能解析的文件个数
遍历目录查找Java文件: public static void ergodicDir(File dir, HashSet<String> argNameSet, HashSet<S ...
- java设计模式5——适配器模式
java设计模式5--适配器模式 1.结构型模式介绍 1.1.作用 从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题. 分类: 适配器模式 代理模式 桥接模式 装饰模式 组合模式 ...
- Java设计模式之四 ----- 适配器模式和桥接模式
前言 在上一篇中我们学习了创建型模式的建造者模式和原型模式.本篇则来学习下结构型模式的适配器模式和桥接模式. 适配器模式 简介 适配器模式是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型 ...
- Java设计模式----初识适配器模式
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- Java线程中yield与join方法的区别
长期以来,多线程问题颇为受到面试官的青睐.虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用.之前,我讨论了一个w ...
随机推荐
- 微信小程序开发踩坑与总结 -
原文链接:https://segmentfault.com/a/1190000008516296 前段时间把公司小程序项目开发完成了,所以来写写自己开发过程中碰到的问题和解决方法,以及用到的提高效率的 ...
- floyed dij spfa 模板
/* SPFA模板 */ const int inf=0x3f3f3f3f; inline int SPFA(int s){ memset(dis,inf,sizeof(dis)); queue< ...
- BZOJ1854: [Scoi2010]游戏(二分图匹配)
题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...
- 用Java读取xml文件内容
在AXP中,DOM解析器是1 Document Builder类的一个实例,该实例由 DocumenBailderfactorv类负责创,步如下 DocumentBuilderFactory fa ...
- tcp回显客户端发送的数据
客户端: import socket tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_socket.connect ...
- shell 脚本入门
shell script 是一个程序化脚本,使用shell语法跟linux命令完成的一个程序. 注意事项: 文件开头: #!/bin/bash 文本以enter符号作为开始执行该行语句,用跳脱符 \e ...
- dts--framework(二)
Framwork下个文件中包含的函数 packet.py LayersTypes = { ', 'arp', 'lldp'], # ipv4_ext_unknown, ipv6_ext_unknown ...
- Python学习笔记:logging(日志处理)
在一个软件中,日志是可以说必不可少的一个组成部分,通常会在定位客户问题或者记录软件使用情况等场景中会用到.logging模板块是Python的一个内置标准库,用于实现对日志的控制输出,对于平常的日志输 ...
- linux最大进程数
使用 ulimit -a 命令,查看 max user processes 的输出,就是系统最大进程数 core file size (blocks, -c) unlimited data seg s ...
- 一些 Markdown 语法
参考于: https://www.jianshu.com/p/b03a8d7b1719 [先挖个坑,来日再填]