设计模式(二)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 ...
- linux&shell学习系列
1.VMware安装Centos7虚拟机 2.Linux之vim详解 3.linux后台运行的几种方式 4.linux权限管理 5.linux之用户和用户组管理详解 6.grep文本搜索工具详解 7. ...
- 1.html基础知识
1.html定义: html是一种超文本标记语言,“超文本”是指页面可以包含图片.链接.音乐.程序等非文字元素. Html不是一种编程语言. 2.html5的新特性: 用于绘画的canvas元素: 用 ...
- Angular ngx-echarts图表
1. 安装echarts包.ngx-echarts包 npm install echarts --save npm install ngx-echarts --save 2. angular.json ...
- ServiceStack.Redis高效封装和简易破解
1.ServiceStack.Redis封装 封装的Redis操作类名为RedisHandle,如下代码块(只展示部分代码),它的特点: 1)使用连接池管理连接,见代码中的PooledClientMa ...
- js中对于数组的操作
let myArray=[11,22,33]; console.log('原数组:',myArray); myArray.push(44,55); console.log('用push在数组后面插入元 ...
- Java基础学习笔记(五) - 常用的API
API介绍 概念:API 即应用编程程序接口.Java API是JDK中提供给我们使用的类说明文档,这些类将底层的代码实现封装.无需关心这些类是如何实现,只需要学习如何使用. 使用:通过API找到需要 ...
- JVM(一)内存分配
方法区: ①存储被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码数据 ②又称为永久代,仅对于Hotspot来讲,JRockit和IBM J9里面没有永久代的概念,1.8以后是元空间,直接使 ...
- Redis之安装配置(Windows)
下载 下载地址:https://github.com/MSOpenTech/redis/releases 解压,文件的名字重命名为redis. 打开文件夹,内容如下: 发送redis-server.e ...
- 使用Spring-boot-starter标准改造项目内的RocketMQ客户端组件
一.背景介绍 我们在使用Spring Cloud全家桶构建微服务应用时,经常能看到spring-boot-xxx-starter的依赖,像spring-boot-starter-web.spring- ...