Adapter适配器模式--图解设计模式
第二章: Adapter 模式
Adapter模式分为两种:
1.类适配器模式
2.委托适配器
我看的是《图解设计模式》这本书,这小鬼子说的话真难懂,只能好好看代码理解。
先说适配器模式要表达的什么意思,首先这个名字就很容易联想到电源适配器,一个道理,我要充电,但你不能让我直接把电线插进插座,这样肯定会冲爆,我用不了这么多电啊! 这时候就需要一个适配器,给电压转换一下充的舒舒服服的,就这意思。
实际发开中,有一个类库写了很多方法,但我只需要其中一两个,那么就写一个适配器,把这两个方法拿出来用,要是出了Bug,就直接去Adapter里面找,而不是去翻那个类库。
实际编码实现(类适配):
Banner类所扮演的角色是(Adaptee(被适配)),它内部拥有两个方法,很简单的打印语句:
package example.adapter;
public class Banner {
private String string;
public Banner(String string) {
super();
this.string = string;
}
public void showWithPeren() {
System.out.println("(" + string + ")");
}
public void showWithAster() {
System.out.println("*" + string + "*");
}
}
Print是需求,你需要什么?
package example.adapter;
public interface Print {
public abstract void printWeak();
public abstract void printStrong();
}
PrintBanner是适配器,实现需求,继承Banner,对外提供Banner的构造和需要的方法:
package example.adapter;
public class PrintBanner extends Banner implements Print{
public PrintBanner(String string) {
super(string);
}
@Override
public void printWeak() {
showWithPeren();
}
@Override
public void printStrong() {
showWithAster();
}
}
Main测试:
package example.adapter;
public class Main {
public static void main(String[] args) {
Print p = new PrintBanner("HelloWorld");
p.printWeak();
p.printStrong();
}
}
实际编码实现(委托):
将Print和PrintBanner稍作改动:
现在,PrintBanner里面拥有了Banner的成员并在构造方法里面实例化进行调用。
package example.adapter.two;
public class PrintBanner extends Print{
private Banner banner;
public PrintBanner(String string) {
super();
this.banner = new Banner(string);
}
@Override
public void printWeak() {
banner.showWithPeren();
}
@Override
public void printStrong() {
banner.showWithAster();
}
}
package example.adapter.two;
public abstract class Print {
public abstract void printWeak();
public abstract void printStrong();
}
Adapter适配器模式--图解设计模式的更多相关文章
- [C# 设计模式] Adapter - 适配器模式(两种)
Adapter - 适配器模式 序 现实生活中,我们常用到适配器. 你当前打开我这篇文章的笔记本电脑,电源的另一边不正连着一块适配器吗? 你平时想将三口插座插进二口插座里面,不也需要一个适配器吗? 整 ...
- 设计模式06: Adapter 适配器模式(结构型模式)
Adapter 适配器模式(结构型模式) 适配(转换)的概念无处不在:电源转接头.电源适配器.水管转接头... 动机(Motivation)在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象 ...
- C++设计模式-Adapter适配器模式
Adapter适配器模式作用:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 分为类适配器模式和对象适配器模式. 系统的数据和 ...
- C++设计模式-Adapter适配器模式(转)
Adapter适配器模式作用:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 分为类适配器模式和对象适配器模式. 系统的数据和 ...
- 适配器模式 adapter 结构型 设计模式(九)
现实世界中的适配器模型 先来看下来几个图片,截图自淘宝 上图为港版的插头与港版的插座 上图为插座适配器卖家的描述图 上图为适配后的结果 现实世界中适配器模式 角色分类 这就是适配器模式在电 ...
- 设计模式C++学习笔记之八(Adapter适配器模式)
适配器模式,使用之处比较特殊,不属于常规设计模式,主要用于不同系统之间的处理.是将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工 ...
- 一天一个设计模式——Adapter适配器模式(Wrapper模式)
一.模式说明 在现实生活中,当需要将两种设备连接起来,但是两个设备的接口规范又不一致(比如电脑上只有Type-C接口,但是你的显示器是HDMI接口),这时候就需要一个适配器,适配器一端连接电脑,一端连 ...
- 设计模式(七):Adapter 适配器模式 -- 结构型模式
1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化. 例子1:iphone4,你即可以 ...
- 设计模式(6)--Adapter(适配器模式)--结构型
1.模式定义: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 2.模式特点: Adapter模式使原本因接口不匹配(或者不兼 ...
随机推荐
- tar命令中的 -C 作用
我用这个命令:tar zcvf chao.tar.gz /chao/* 打包文件的时候,在压缩包里把 /chao/这个路径也打包进去了. [root@yunwei-test chao]# ls / ...
- putty秘钥转换成xhell支持的格式
使用XShell导入KEY的时候报“Failed to import the user key!”错误 这个错误表明导入的private key文件不是XShell所支持的,有三种可能: 将Publi ...
- 前端摸爬滚打之路(一)之 JavaScript 基础
前言:这是我第一次在博客上记录自己的前端学习过程,以往都是在桌面右侧开个 onenote 小窗,记录自己在学习过程中获得的知识.通常都是记录的满满当当,然后心满意足的关闭窗口,但是记录不代表学会.这些 ...
- 关于java中构造方法、实例初始化、静态初始化执行顺序
在Java笔试中,构造方法.实例初始化.静态初始化执行顺序,是一个经常被考察的知识点. 像下面的这道题(刚刚刷题做到,虽然做对了,但是还是想整理一下) 运行下面的代码,输出的结果是... class ...
- canvas多彩粒子星空背景
HTML5 canvas 实现多颜色粒子星空页面背景,喜欢的可以收藏.自己可以定义颜色,粒子透明度,粒子数量,粒子大小. 预览效果图如下: 1.获取canvas上下文,并且动态设置canvas尺寸和屏 ...
- maven打包报错问题解析
1. 场景描述 Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:3.1.0:clean (default-clea ...
- shell_链接命令ln与nohup命令使用方法
ln命令是一个链接命令,工作中用的比较多的就是对一个文件或者是目录建立起软连接.软连接的概念类似于windows下的快捷方式.比如,在win下,我们经常在安装完word.ppt等office程序后,在 ...
- Spring Boot 2.x (十八):邮件服务一文打尽
前景介绍 在日常的工作中,我们经常会用到邮件服务,比如发送验证码,找回密码确认,注册时邮件验证等,所以今天在这里进行邮件服务的一些操作. 大致思路 我们要做的其实就是把Java程序作为一个客户端,然后 ...
- WinForm控件之【MaskedTextBox】
基本介绍 掩码文本控件,使用掩码来区分用户输入文本是否正确. 常设置属性 BeepOnError:指示键入无效字符是控件是否发出系统提示音: CutCopyMaskFormat:设置控件文本值复制到剪 ...
- Scrum是脆弱的,不敏捷的
正如标题所示,这篇文章是关于 Scrum 的两个不同方面.第一部分涉及 Scrum 不敏捷,第二部分涉及 Scrum 脆弱. 在详细介绍之前,简短的免责声明:我在这篇文章(以及一般博客中)中提出的所有 ...