设计模式(二)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中,且具有不同的类型,而且对于该集合中的对象, ...
随机推荐
- java算法基础范例
题目1:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3 ...
- Spring boot 梳理 - 全局配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下。
全局配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下.
- Spring 梳理 - JavaConfig、SPI、SCI、SpringSCI、WebApplicationInitializer、AbstractAnnotationConfigDispatcherServletInitializer、WebMvcConfigurationSupport
总结1: SCI:Servlet容器(Tomcat)提供的初始化Servlet容器本身的接口,可替换web.xml SpringSCI:SpringServletContainerInitialize ...
- springboot值mybatis 别名等配置
在application配置文件中添加如下: mybatis: #该配置替换在sql-config-map中的typeAliases配置 type-aliases-package: com.ww.ww ...
- Python基础(十六)
今日主要内容 内置模块(标准库) 序列化 hashlib collections 软件开发规范 一.内置模块(标准库) (一)序列化模块 什么是序列化? 将一种数据结构(如列表.字典)转换为另一种特殊 ...
- 定一条数据用: => slot-scope属性,再显示对应的数据
通过 Scoped slot 可以获取到 row, column, $index 和 store(table 内部的状态管理)的数据: {{scope.row}} =>获取整行的数据 {{sco ...
- Android Studio 优秀插件: Parcelable Code Generator
这里假设我们已经会使用 Parcelable 序列化一个对象了~~ 那么大家会发现 Parcelable 使用起来有些复杂,因为我们要自己复写 几个方法,而且当类的属性比较多的时候,我们就会难受了,又 ...
- Vue中使用key的作用
key的作用是为了在diff算法执行时更快的找到对应的节点,提高diff速度 key具有唯一性 vue中循环需加 :key=“唯一标识” ,唯一标识可以使item里面id index 等,因为vue组 ...
- A-04 坐标轴下降法
目录 坐标轴下降法 一.坐标轴下降法流程 二.坐标轴下降法和梯度下降法的异同 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:http ...
- 自己动手撸一个LinkedList
自己动手撸一个LinkedList 1. 原理 LinkedList是基于双链表的动态数组,数据添加删除效率高,只需要改变指针指向即可,但是访问数据的平均效率低,需要对链表进行遍历.因此,Linked ...