Java设计模式—适配器模式
来源:互联网 发布:淘宝最高等级店铺 编辑:程序博客网 时间:2024/04/28 02:06
适配器模式的个人理解:
首先有一个目标角色、一个源角色还有一个适配器角色。我们要做的就是利用适配器角色将源角色转换为目标角色。而目标角色是一个正在良好运行的一个角色。
转换方法:
(1) 适配器类继承extends原角色——类适配器
(2) 适配器类和原角色类进行关联,即通过适配器类的构造函数将多个原角色引入——对象适配器(常用)
适配器模式的定义:
将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
通用类图如下所示:
● Target目标角色
该角色定义把其他类转换为何种接口,也就是我们的期望接口,就是目标角色。
● Adaptee源角色
你想把谁转换成目标角色,这个“谁”就是源角色,它是已经存在的、运行良好的类或对象,经过适配器角色的包装,它会成为一个崭新、靓丽的角色。
● Adapter适配器角色
适配器模式的核心角色,其他两个角色都是已经存在的角色,而适配器角色是需要新建立的,它的职责非常简单:把源角色转换为目标角色,怎么转换?通过继承或是类关联的方式。(即类适配器和对象适配器)
通用源代码如下:
public class Test5 {public static void main(String[] args) {//原有的业务逻辑Target target = new ConcreteTarget();target.request();//现在增加了适配器角色后的业务逻辑Target target2 = new Adapter();target2.request();}}//目标角色interface Target { //目标角色有自己的方法 public void request();}//目标角色的实现类class ConcreteTarget implements Target { public void request() { System.out.println("if you need any help,pls call me!"); }}//源角色class Adaptee { //原有的业务逻辑 public void doSomething(){ System.out.println("I'm kind of busy,leave me alone,pls!"); }}//适配器类,在类适配器中需要继承源角色。class Adapter extends Adaptee implements Target { public void request() { super.doSomething(); }}
适配器模式的优点
● 适配器模式可以让两个没有任何关系的类在一起运行,只要适配器这个角色能够搞定他们就成。
● 增加了类的透明性
想想看,我们访问的Target目标角色,但是具体的实现都委托给了源角色,而这些对高层次模块是透明的,也是它不需要关心的。
● 提高了类的复用度
当然了,源角色在原有的系统中还是可以正常使用,而在目标角色中也可以充当新的演员。
● 灵活性非常好
某一天,突然不想要适配器,没问题,删除掉这个适配器就可以了,其他的代码都不用修改,基本上就类似一个灵活的构件,想用就用,不想就卸载。
/*************************************************************************************************
到此为止,上面均在阐述类适配器的使用方法。下面说说自己对对象适配器的理解。
对象适配器模式的使用场景:当源角色提供的接口不止一个的时候。这时需要将适配器类实现目标接口,并且在适配器类的构造函数及中将源角色提供的多个接口对象引入。
- JAVA设计模式——适配器模式
- java设计模式——适配器模式
- JAVA设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式—适配器模式
- java设计模式—适配器模式
- Java设计模式—适配器模式
- Java设计模式学习—适配器模式
- Java 适配器设计模式
- iOS使用Reveal分析app界面
- 123
- cocos2d - JS 用角度计算向量
- 设置input上传类型
- 关于ios中的控件切换成中文的方法
- Java设计模式—适配器模式
- html和body之间空白解决
- 技术交流网站stackoverflow
- GetSystemDefaultLangID 取得系统默认ID对照表
- Duilib + libuv实践小程序
- 剑指Offer——由二叉树的前序中序重构
- 推荐一些国内的Jquery CDN免费服务
- Java enum的用法详解
- 测试工程师修炼笔记_Java自学推荐