文档章节

GOF23之适配器模式

captainliu
 captainliu
发布于 2017/05/10 17:38
字数 514
阅读 16
收藏 0

适配器模式:

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

模式中的角色:

--目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类。也可以是接口。

--需要适配的对象(Adaptee):需要适配的类或者适配者类。

--适配器(Adapter):通过包装一个需要适配的对象,把原接口转化成目标接口。

 

这里我们以 笔记本,ps/2键盘  为例,笔记本只支持usb,那我们就需要生产一个支持usb和ps/2转换的适配器,笔记本相当于客户端(client)、键盘相当于被适配的对象(adaptee),转接器相当于适配器(adapter)

package com.gof.adapter;

/**
 * 被适配的类
 * (相当于例子中的,ps/2键盘)
 * @author root
 *
 */
public class Adaptee {
	public void request() {
		System.out.println("可以完成客户需要的功能!");
	}
}
package com.gof.adapter;
/**
 * 客户端类
 * (相当于例子中的笔记本,只有usb)
 * @author root
 *
 */
public class Client {
	
	public void test1(Target t ) {
		t.handleReq();
	}
	
	public static void main(String[] args) {
		Client client = new Client();
		
		Adaptee adaptee = new Adaptee();
		 Adapter adapter = new Adapter();
		client.test1(adapter);
	}

}
package com.gof.adapter;

/**
 * 这个是笔记本的usb功能
 * @author root
 *
 */
public interface Target {
	void  handleReq();
}
package com.gof.adapter;

/**
 * 适配器本身
 * (相当于usb和ps/2的转换器)
 * @author root
 *
 */
public class Adapter extends Adaptee implements Target{

	@Override
	public void handleReq() {
		  super.request();
	}

}

注:上述适配器采用的是继承的方式、缺点是不能再继承其他的类了。

方法二:对象适配器、采用组合的方式

修改适配器,和客户端调用

package com.gof.adapter;

/**
 * 适配器本身
 * (相当于usb和ps/2的转换器)
 * @author root
 *
 */
public class Adapter2 implements Target{

	private  Adaptee adaptee;
	@Override
	public void handleReq() {
		adaptee.request();
	}
	public Adapter2(Adaptee adaptee) {
		super();
		this.adaptee = adaptee;
	}

	
	
}
package com.gof.adapter;
/**
 * 客户端类
 * (相当于例子中的笔记本,只有usb)
 * @author root
 *
 */
public class Client2 {
	
	public void test1(Target t ) {
		t.handleReq();
	}
	
	public static void main(String[] args) {
		Client2 client = new Client2();
		
		Adaptee adaptee = new Adaptee();
		
		Adapter2 Adapter2 = new Adapter2(adaptee);
		client.test1(Adapter2);
	}

}

 

常用场景:

© 著作权归作者所有

captainliu
粉丝 11
博文 106
码字总数 83678
作品 0
昌平
程序员
私信 提问
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
2018/06/24
0
0
设计模式已经陨落了?

你现在是坐在一个程序员旁边吗?如果是的话,那么在你读下面的段落之前,有一个简单的实验。让他们到一边去,问问他们两个问题并记录下答案。首先问他们“什么是设计模式?”然后再问“说出你...

oschina
2014/03/11
9.1K
69
《PHP设计模式大全》系列分享专栏

《PHP设计模式大全》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201739.html 文章 php设计模式介绍之编程惯用法第1/3页 php设计模式介绍之值对象模式第1/5页...

kaixin_code
2018/11/06
0
0
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu
2017/11/02
0
0
《JavaScript设计模式与开发实践》原则篇(2)—— 最少知识原则

最少知识原则(LKP)说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这 里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。 单一职责原则指导我们...

嗨呀豆豆呢
2018/12/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IDEA中package不能引入依赖的解决方法

在IDEA中, 使用maven打包。出现了package后没有将需要的依赖放入包中, 运行会抛出java.lang.NoClassDefFoundError的异常。 解决办法 在pom.xml中加入: <build> <plugins> ...

dreamness
13分钟前
0
0
IDEA模板

import com.google.common.collect.Lists;import java.util.List;/** * @author hll * @date 2019/5/26 - 13:12 */public class Demo { // 模板五 // prsf -- > ......

一只小青蛙
30分钟前
0
0
9.jackjson使用教程

1.导入相关jar <!-- 10.jackson --> <!--10.1 定义了底层的streaming API和实现了Json特性 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</art......

20190513
33分钟前
1
0
如何使用 rsync 备份 Linux 系统的一些介绍

备份一直是 Linux 世界的热门话题。回到 2017,David Both 为 Opensource.com 的读者在使用 rsync 备份 Linux 系统方面提了一些建议,在这年的更早时候,他发起了一项问卷调查询问大家,在 ...

Linux就该这么学
54分钟前
3
0
以太坊私有链搭建

https://blog.csdn.net/Blockchain_lemon/article/details/80589123

Moks角木
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部