GoF--适配器设计模式
1.概念:
适配器模式(Adapter Pattern)把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
2.形式
a.类的适配器模式 b.对象的适配器模式 c.缺省适配器模式
3. 模式中的角色
3.1 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
3.2 需要适配的类(Adaptee):需要适配的类或适配者类。
3.3 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
4.适配器模式的类图
4.1 类的适配器模式:采用继承实现
4.2 对象的适配器模式:采用对象组合方式实现
4.3 缺省适配器模式:采用抽象类过渡实现
5 类的适配器设计模式
类适配器,因为 Adapter 类既继承了 Adaptee (被适配类),也实现了 Target 接口,在 Client 类中我们可以根据需要选择并创建任一种符合需求的子类,来实现具体功能。
Interface : Target
package edu.gof.adapter.class_; //目标接口,或称为标准接口
public interface Target { public void request();
}
Class : Adaptee
package edu.gof.adapter.class_; //已存在的、具有特殊功能、但不符合我们既有的标准接口的类
public class Adaptee { public void specificRequest(){
System.out.println("被适配的类具有的 特殊功能...");
} }
Class : ConcreteTarget
package edu.gof.adapter.class_; //具体目标类,只提供普通功能
public class ConcreteTarget implements Target { public void request() {
System.out.println("普通类 具有 普通功能...");
} }
Class : Adapter
package edu.gof.adapter.class_; //适配器类,继承了被适配类,同时实现标准接口
public class Adapter extends Adaptee implements Target{ public void request() {
super.specificRequest();
} }
Class : AdapterTest
package edu.gof.adapter.class_; public class AdapterTest { public static void main(String[] args) {
Target clientA = new ConcreteTarget();
clientA.request(); Target clientB = new Adapter();
clientB.request();
} }
Console :
普通类 具有 普通功能...
被适配的类具有的 特殊功能...
6.对象的适配器设计模式
对象适配器模式,可以使得 Adapter 类(适配类)根据传入的 Adaptee 对象达到适配多个不同被适配类的功能。
Interface :Target
package edu.gof.adapter.object_; public interface Target { public void request();
}
Class : Adatee
package edu.gof.adapter.object_; public class Adaptee { public void specificRequest(){
System.out.println("被适配类 具有 特殊功能...");
}
}
Class :ConcreteTarget
package edu.gof.adapter.object_; public class ConcreteTarget implements Target { public void request() {
System.out.println("普通类 具有 普通功能...");
} }
Class : Adapter
package edu.gof.adapter.object_; public class Adapter implements Target{
// 直接关联被适配类
private Adaptee adaptee; public Adapter() {
super();
}
// 可以通过构造函数传入具体需要适配的被适配类对象
public Adapter(Adaptee adaptee) {
super();
this.adaptee = adaptee;
} public void request() {
// 这里是使用委托的方式完成特殊功能
this.adaptee.specificRequest();
} }
Class :AdapterTest
package edu.gof.adapter.object_; public class AdapterTest { public static void main(String[] args){
Target clientA = new ConcreteTarget();
clientA.request(); Target clientB = new Adapter(new Adaptee());
clientB.request();
}
}
Console :
普通类 具有 普通功能...
被适配类 具有 特殊功能...
7.缺省适配器设计模式
缺省适配(Default Adapter)模式为一个接口提供缺省实现,这样子类型可以从这个缺省实现进行扩展,而不必从原有接口进行扩展。作为适配器模式的一个特例,缺省是适配模式在JAVA语言中有着特殊的应用。
Interface :Target
package edu.gof.adapter.abstract_; public interface Target { public void request(); public void response(); }
Class : AbstractTarget
package edu.gof.adapter.abstract_; public class AbstractTarget implements Target{ public void request() {
// TODO Auto-generated method stub } public void response() {
// TODO Auto-generated method stub }
}
Class :Adapter
package edu.gof.adapter.abstract_; public class Adapter extends AbstractTarget { public void request(){
System.out.println("适配器类 只适配 需要的 功能...");
}
}
Class : AdapterTest
package edu.gof.adapter.abstract_; public class AdapterTest { public static void main(String[] args){
Target clientA = new Adapter();
clientA.request();
clientA.response();
}
}
Console :
适配器类 只适配 需要的 功能...
啦啦啦
啦啦啦
啦啦啦
GoF--适配器设计模式的更多相关文章
- Java适配器设计模式
适配器设计模式,一个接口首先被一个抽象类先实现(此抽象类通常称为适配器类),并在此抽象类中实现若干方法(但是这个抽象类中的方法体是空的),则以后的子类直接继承此抽象类,就可以有选择地覆写所需要的方法. ...
- 猿取向的规划设计模式 ——GoF《设计模式》阅读摘要(零)
这个话题是很奇怪,设计模式是引导程序的设计不是模仿什么软件?呃.我的意思是,这是 面"对象"相对的设计模式. 我曾见过有人写<给妻子解释设计模式>,这样的把计算机中的思 ...
- [gkk]传智-适配器设计模式,如同电源适配器
//适配器设计模式 是图形化设计中用的.如同电源适配器 import java.awt.*; inport java.awte public calss MyFrame{ public static ...
- JAVA基础—适配器设计模式
适配器概念 在计算机编程中,适配器模式将一个类的接口适配成用户所期待的.使用适配器,可以使接口不兼容而无法在一起工作的类协调工作,做法是将类自己包裹在一个已经存在的类中. JDK对适配器设计模式的应用 ...
- Java设计模式之适配器设计模式(项目升级案例)
今天是我学习到Java设计模式中的第三个设计模式了,但是天气又开始变得狂热起来,对于我这个凉爽惯了的青藏人来说,又是非常闹心的一件事儿,好了不管怎么样,目标还是目标(争取把23种Java设计模式接触一 ...
- IOS设计模式第六篇之适配器设计模式
版权声明:原创作品,谢绝转载!否则将追究法律责任. 那么怎么使用适配器设计模式呢? 这个之前提到的水平滚动的视图像这样: 为了开始实现他,我们创建一个新的继承与UIView的HorizontalScr ...
- 适配器设计模式初探(Java实现)
本篇随笔主要介绍Java实现设配器设计模式. 先来看下待解决的问题: (图片转自http://blog.csdn.net/jason0539) 由上图的情况可知,欧洲壁式插座只有三足插口,如果我们想要 ...
- Design Pattern Adaptor 适配器设计模式
适配器设计模式是为了要使用一个旧的接口,或许这个接口非常难用,或许是和新的更新的接口不兼容,所以须要设计一个适配器类,然后就能够让新旧的接口都统一. 就是这种一个图: watermark/2/text ...
- 实践GoF的设计模式:迭代器模式
摘要:迭代器模式主要用在访问对象集合的场景,能够向客户端隐藏集合的实现细节. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:迭代器模式>,作者:元闰子. 简介 有时会遇到这 ...
- php适配器设计模式
<?php //适配器模式 //服务器端代码 class tianqi{ public static function show(){ $today= array('tep' =>28 , ...
随机推荐
- spring中 context:property-placeholder 导入多个独立的 .properties配置文件
spring中 context:property-placeholder 导入多个独立的 .properties配置文件? Spring容器采用反射扫描的发现机制,在探测到Spring容器中有一个 o ...
- PCL超体聚类
超体聚类是一种图像的分割方法. 超体(supervoxel)是一种集合,集合的元素是“体”.与体素滤波器中的体类似,其本质是一个个的小方块.与大部分的分割手段不同,超体聚 类的目的并不是分割出某种特定 ...
- cv_bridge中的编码模式与实现
image_encodings.cpp文件是关于图像编码模式的源文件,其中规定了RGB的图像以及深度图的编码模式 该编码文件image_encodings.cpp所依赖的头文件图 命令空间 sens ...
- 微信小程序——购物车数字加减
上一篇,我们有讲到如何造一个购物车弹层.今天来说一下,购物车数量的加减如何实现. 主要思路就是在data里面定义一个属性,属性值就是这个数量.点击+的时候就+1,点击-的时候就-1,再结合setDat ...
- [hadoop读书笔记] 第九章 构建Hadoop集群
P322 运行datanode和tasktracker的典型机器配置(2010年) 处理器:两个四核2-2.5GHz CPU 内存:16-46GN ECC RAM 磁盘存储器:4*1TB SATA 磁 ...
- 自然语言交流系统 phxnet团队 创新实训 个人博客 (十一)
名思义是 给游戏场景 添加一个 天空背景 让游戏更加精美,更具有魅力 添加天空盒 有两种方式 1 : 在当前相机上添加skybox 2 : 在当前场景上添加skybox 上面的两种方式的结果是一 ...
- IDEA中 @override报错的解决方法
今天用IDEA导入一个java工程时,碰上一个问题,代码中所有@override处标红,并提示:@override不支持对接口的实现. 网上百度了一下发现, 原因是引用JDK5版本中存在小bug的问题 ...
- moodle中的完形填空题的文本编写方法
moodle中的完形填空题的文本编写方法 [完形填空题]考题把一段文字挖去一些空,让考生根据上下文正确地完成这些填空.完型填空题中的一段短文可以包括各种题目,如选择,填空,和数字题等. 题目的编辑是在 ...
- 使用Maven构建和测试Java项目
我们在创建项目时要学习的是如何使用 Maven 来创建一个 Java 应用程序.现在将学习如何构建和测试应用程序. 进入到 C:\MVN 目录我们准备创建来 java应用程序.打开 consumerB ...
- Lambda动态排序
private static IList<T> IListOrderBy<T>(IList<T> list, string propertyName) where ...