GOF23设计模式之适配器模式(Adapter)
一、适配器模式概述
将一个类的接口转换成客户可用的另外一个接口。
将原本不兼容不能在一起工作的类添加适配处理类,使其可以在一起工作。
二、适配器模式场景
要想只有USB接口的电脑想使用PS/2接口的键盘,必须使用PS/2转USB的适配器。
三、适配器模式示例
(1)定义USB接口
/**
* 客户所期待的接口(相当于USB接口)
* @author CL
*
*/
public interface Target { void handleReq(); }
(2)定义PS/2键盘
/**
* 被适配的类 (相当于例子中的PS/2键盘)
* @author CL
*
*/
public class Adaptee { public void request() {
System.out.println("我是PS/2接口的键盘!");
} }
(3)定义PS/2转USB的适配器
a. 类适配器
/**
* 适配器(相当于可以将PS/2接口转换成USB接口的适配器本身)
* 类适配器方式
* @author CL
*
*/
public class Adapter extends Adaptee implements Target { public void handleReq() {
super.request();
} }
测试:
/**
* 客户端类(相当于只能识别USB接口键盘的电脑)
* @author CL
*
*/
public class Client { public void test(Target t) {
t.handleReq();
} public static void main(String[] args) {
Client c = new Client();
Adaptee a = new Adaptee(); Target t = new Adapter(); //类适配器方式 c.test(t);
} }
控制台输出:
我是PS/2接口的键盘!
b.对象适配器
/**
* 适配器(相当于可以将PS/2接口转换成USB接口的适配器本身)
* 对象适配器方式,使用了组合的方式跟被适配对象整合
* @author CL
*
*/
public class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
} public void handleReq() {
adaptee.request();
} }
测试:
/**
* 客户端类(相当于只能识别USB接口键盘的电脑)
* @author CL
*
*/
public class Client { public void test(Target t) {
t.handleReq();
} public static void main(String[] args) {
Client c = new Client();
Adaptee a = new Adaptee(); Target t = new Adapter3(); //类适配器方式 c.test(t);
} }
控制台输出:
我是PS/2接口的键盘!
GOF23设计模式之适配器模式(Adapter)的更多相关文章
- GOF23设计模式之适配器模式
GOF23设计模式之适配器模式 结构型模式: 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题. 分类:适配器模式.代理模式.桥接模式.装饰模式.组合模式.外观模式. ...
- 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)
原文:乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabc ...
- 8.3 GOF设计模式二: 适配器模式 Adapter
GOF设计模式二: 适配器模式 Adapter 为中国市场生产的电器,到了美国,需要有一个转接器才能使用墙上的插座,这个转接 器的功能.原理?复习单实例模式 SingleTon的三个关键点 ...
- 怎样让孩子爱上设计模式 —— 7.适配器模式(Adapter Pattern)
怎样让孩子爱上设计模式 -- 7.适配器模式(Adapter Pattern) 标签: 设计模式初涉 概念相关 定义: 适配器模式把一个类的接口变换成client所期待的还有一种接口,从而 使原本因接 ...
- 【GOF23设计模式】适配器模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_适配器模式.对象适配器.类适配器.开发中场景 适配器模式 笔记本电脑只有USB接口,新买的键盘是PS2接口的,需要用适 ...
- 二十四种设计模式:适配器模式(Adapter Pattern)
适配器模式(Adapter Pattern) 介绍将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.示例有一个Message实体类 ...
- 【设计模式】适配器模式 Adapter Pattern
适配器模式在软件开发界使用及其广泛,在工业界,现实中也是屡见不鲜.比如手机充电器,笔记本充电器,广播接收器,电视接收器等等.都是适配器. 适配器主要作用是让本来不兼容的两个事物兼容和谐的一起工作.比如 ...
- Java设计模式之适配器模式(Adapter)
转载:<JAVA与模式>之适配器模式 这个总结的挺好的,为了加深印象,我自己再尝试总结一下 1.定义: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法 ...
- JavaScript设计模式 Item9 --适配器模式Adapter
适配器模式(转换器面模式),通常是为要使用的接口,不符本应用或本系统使用,而需引入的中间适配层类或对象的情况. 适配器模式的作用是解决两个软件实体间的接口不兼容的问题. 一.定义 适配器模式(Adap ...
随机推荐
- Django-自定义分页组件
1.封装的分页代码: class PageInfo(object): def __init__(self,current_page,all_count,per_page,base_url,show_p ...
- 将django的admin后台界面改为中文
很简单,直接修改settings配置文件的以下3项(django==1.9). LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_TZ ...
- 《Effective C++》第4章 设计与声明(2)-读书笔记
章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...
- mybatis环境搭建和开发步骤
环境搭建 第一步:导入jar包 第二步:导入核心配置文件(mybatis-config.xml) <?xml version="1.0" encoding="UTF ...
- C++里的单体类实现
单件模式是设计模式中最简单的模式了. 定义: 确保一个类只有一个实例,并提供一个全局的访问点. 把一个类设计成自己管理的一个单独实例,同时避免其他类再自行生成实例(所以构造函数用protect或pri ...
- CS231n课程笔记翻译3:线性分类笔记
译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Linear Classification Note,课程教师Andrej Karpathy授权翻译.本篇教程由杜客翻译完成,巩子嘉和堃堃进行校 ...
- dyld: lazy symbol binding failed: Symbol not found: ___sincosf_stret
This is the error I get: dyld: lazy symbol binding failed: Symbol not found: ___sincosf_stret Refere ...
- 余弦相似度及基于python的三种代码实现、与欧氏距离的区别
1.余弦相似度可用来计算两个向量的相似程度 对于如何计算两个向量的相似程度问题,可以把这它们想象成空间中的两条线段,都是从原点([0, 0, ...])出发,指向不同的方向.两条线段之间形成一个夹角, ...
- tomcat的localhost-config is missing 错误的解决方法
运行项目时报错,错误信息为: The tomcat server configuration at /sever/tomcat v7.0 localhost-config is missing 解决方 ...
- python使用wget下载网络文件
wget是一个从网络上自动下载文件的自由工具.它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理. ubuntu 安装wget pip install wget 从网络或本地硬盘下载文件(并 ...