设计模式(二)Adapter模式
Adapter模式也被成为Wrapper模式。适配器模式用于填补“现有的程序”和“所需的程序”之间差异的设计模式。
Adapter模式有两种,即使用继承的适配器和使用委托的适配器。
1.使用继承的适配器

下面根据代码来解释使用继承的适配器这种模式。
package BigJunOba.bjtu.Adapter;
public class Banner {
private String string;
public Banner(String string) {
this.string = string;
}
public void showWithParen() {
System.out.println("(" + string + ")");
}
public void showWithAster() {
System.out.println("*" + string + "*");
}
}
这里的Banner类就是现有的程序。有可以对字符串进行操作的showWithParen和showWithAster方法。
package BigJunOba.bjtu.Adapter;
public interface Print {
public abstract void printWeak();
public abstract void printStrong();
}
Print接口声明了两种方法,即加括号printWeak和加星号printStrong方法。这里的Print接口就是实际的需求,现在要做的就是需要一个适配器。
package BigJunOba.bjtu.Adapter;
public class PrintBanner extends Banner implements Print {
public PrintBanner(String string) {
super(string);
}
@Override
public void printWeak() {
showWithParen();
}
@Override
public void printStrong() {
showWithAster();
}
}
PrintBanner类就是这个适配器。该类继承了Banner类并且实现了需求。
PrintBanner类使用showWithParen方法实现了printWeak,使用showWithAster方法实现了printStrong。
package BigJunOba.bjtu.Adapter;
public class Main {
public static void main(String[] args) {
Print print = new PrintBanner("hhhhh");
print.printWeak();
print.printStrong();
}
}
(hhhhh)
*hhhhh*
通过测试结果我们可以看出使用继承的适配器的作用。
2.使用委托的适配器

下面根据代码来解释使用委托的适配器这种模式。
主要的Main类和Banner类不变。
package BigJunOba.bjtu.Adapter;
public abstract class Print {
public abstract void printWeak();
public abstract void printStrong();
}
将Print接口改成一个抽象类。
package BigJunOba.bjtu.Adapter;
public class PrintBanner extends Print {
private Banner banner;
public PrintBanner(String string) {
this.banner = new Banner(string);
}
@Override
public void printWeak() {
banner.showWithParen();
}
@Override
public void printStrong() {
banner.showWithAster();
}
}
然后PrintBanner类继承Print抽象类。
由于在PrintBanner类的banner字段中保存了Banner类的实例,该实例是在PrintBanner类的构造函数中生成的。然后printWeak和printStrong方法会通过banner字段调用banner类的showWithParen和showWithAster方法。这种在执行PrintBanner类的方法时,将处理交给其他实例即Banner实例处理的方式叫委托。
两种适配器模式的类图。


设计模式(二)Adapter模式的更多相关文章
- 设计模式--适配器(Adapter)模式
今天学习另一个设计模式,适配器(Adapter)模式,这是一个共同方向,但有特殊要求,就应用到此设计模式.写到这里,想起很久以前,有写过一篇<ASP.NET的适配器设计模式(Adapter)&g ...
- 设计模式之Adapter模式
说起Adapter,STL里的stack和queue都是adapter,底层是deque,隐藏了deque的一些接口,使得其可以达到FIFO是queue,LIFO是stack. The STL sta ...
- 设计模式:Adapter模式
目的:复用代码和兼容以前的代码 思想:提供一个中间层,做兼容 方法:“继承”的方式,“委托”的方式 继承关系图: 委托方式 继承方式 例子: //原来的打印 class Print { public: ...
- 2、适配器 adapter 模式 加个"适配器" 以便于复用 结构型设计模式
1.什么是适配器模式? 适配器如同一个常见的变压器,也如同电脑的变压器和插线板之间的电源连接线,他们虽然都是3相的,但是电脑后面的插孔却不能直接插到插线板上. 如果想让额定工作电压是直流12伏特的笔记 ...
- 设计模式之(二)Adapter模式
今天学习Adapter模式,An adapter helps two incompatible interfaces to work together. This is the real world ...
- 8.3 GOF设计模式二: 适配器模式 Adapter
GOF设计模式二: 适配器模式 Adapter 为中国市场生产的电器,到了美国,需要有一个转接器才能使用墙上的插座,这个转接 器的功能.原理?复习单实例模式 SingleTon的三个关键点 ...
- 设计模式---接口隔离模式之适配器模式(Adapter)
一:概念 通过Adapter模式可以改变已有类(或外部类)的接口形式 二:动机 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不 ...
- java设计模式—Adapter模式
1.核心意图: 将一个类的接口转换成客户希望的另外一个接口,从而使得原本由于接口不兼容而不能一起工作的类可以一起工作. 该模式的目标是通过一个代理(这里是Adapter),在原来的类(Adap ...
- 设计模式 ( 二十 ) 访问者模式Visitor(对象行为型)
设计模式 ( 二十 ) 访问者模式Visitor(对象行为型) 1.概述 在软件开发过程中,对于系统中的某些对象,它们存储在同一个集合collection中,且具有不同的类型,而且对于该集合中的对象, ...
随机推荐
- CF #579 (Div. 3) C.Common Divisors
C.Common Divisors time limit per test2 seconds memory limit per test256 megabytes inputstandard inpu ...
- AppBoxFuture: Raft快照及日志截断回收
AppBoxFuture的存储引擎依赖Raft一致性协议来保证各个分区副本的一致性,如果不处理Raft日志将不断增长,因此需要特定的机制(定期或每处理一定数量的日志)来回收那些无用的日志数据.通过 ...
- Django序列化&django REST framework
第一章.Django序列化操作 1.django的view实现商品列表页(基于View类) # 通过json来序列化,但手写字典key代码量较大,容易出错:还有遇到时间,图片序列化会报错 from g ...
- mybatis-dynamic-query 3.0 更新
项目地址: mybatis-dynamic-query 前言 在 2.0 完成对 tk.mapper 集成,为何 mybatis-dynamic-query 选择 tk.mapper 集成, 再 3. ...
- 从零开始入门 K8s | 应用存储和持久化数据卷:存储快照与拓扑调度
作者 | 至天 阿里巴巴高级研发工程师 一.基本知识 存储快照产生背景 在使用存储时,为了提高数据操作的容错性,我们通常有需要对线上数据进行 snapshot ,以及能快速 restore 的能力.另 ...
- electron教程(四): 使用electron-builder或electron-packager将项目打包为可执行桌面程序(.exe)
我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 子进程管理 electron教程(三): ...
- 【JavaScript】使用纯JS实现多张图片的懒加载(附源码)
一.效果图如下 上面的效果图,效果需求如下 1.还没加载图片的时候,默认显示加载图片背景图 2.刚开始进入页面,自动加载第一屏幕的图片 3.下拉界面,当一张图片容器完全显露出屏幕,即刻加载图片,替换背 ...
- Swoole4-swoole创建Mysql连接池
一 .什么是mysql连接池 场景:每秒同时有1000个并发,但是这个mysql同时只能处理400个连接,mysql会宕机. 解决方案:连接池,这个连接池建立了200个和mysql的连接,这1000个 ...
- java中的Collection和Collections
Collection是集合类的上级接口,继承他的接口主要有Set和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索.排序.线程安全化等操作.
- Asp.Net Core中Session使用
web程序中,Session是一个无法避开的点. 最近新开项目,打算从开始搭建一个基础的架子,后台用户登录成功后,需要保存session. 新建的asp.net core的模板已经包含了Session ...