给女友讲讲设计模式——适配器模式(JAVA实例)5
前言
有这样一个人,看到别人一个个开餐馆赚了好多钱,于是自己也很想在餐饮业这方面大展拳脚,他从别人那里学到了他们的理念,还学习到了他们真正开店的经验。不但如此,他还引进了除了吃饭意外其他的服务,例如说提供了本该是酒吧才有的歌手驻场来提供好的就餐氛围这样的服务。正因为如此,生意做得生龙活虎。
正文
说起适配器模式,主要可以分为三种 : “类适配” ,“对象适配” ,“接口适配”。类适配与对象适配及其相似,接口适配相对有些出入。
下面就代码进行讲解一下。
package adapter;public interface Restaurant {public void haveFood();public void haveDrink();
}
这是一个餐厅的接口,有食物,也有饮料。
package adapter;public class RestaurantImpl implements Restaurant{@Overridepublic void haveFood() {System.out.println("提供各种美食");}@Overridepublic void haveDrink() {System.out.println("提供各种饮料");}}
我们是实现了这个接口,让他有具体的实际意义。
package adapter;public interface Bar {public void haveSong();
}
酒吧接口,提供了一个唱歌驻唱的服务。
package adapter;public class MyRestaurantAdapter extends RestaurantImpl implements Bar{@Overridepublic void haveSong() {System.out.println("在餐厅同样提供酒吧的驻唱服务");}}
用适配器创建我们自己的餐厅,这样我们既有食物,饮料,还有了酒吧所具有的驻唱功能。
package adapter;public class MainTest {public static void main(String[] args) {MyRestaurantAdapter adapter = new MyRestaurantAdapter();adapter.haveFood();adapter.haveDrink();adapter.haveSong();}
}
调用一下自己创造的餐厅。
下面是对象适配器,在适配器中,把自己想要继承的方法,定义为一个变量,然后以构造函数的函数,注入进去,和刚刚类适配器大同小异。
package adapter;public class MyRestaurantAdapter2 implements Bar{private Restaurant restaurant;public MyRestaurantAdapter2(Restaurant restaurant) {this.restaurant = restaurant;this.restaurant.haveFood();this.restaurant.haveDrink();}@Overridepublic void haveSong() {System.out.println("餐厅同样可以有酒吧的相关驻唱服务");}}
package adapter;public class MainTest {public static void main(String[] args) {MyRestaurantAdapter2 adapter2 = new MyRestaurantAdapter2(new RestaurantImpl());adapter2.haveSong();}
}
下面介绍一下接口适配器,使用接口适配器主要的原因是这样的,在一个接口中有很多方法的时候,我们想要实现它,必须得把所有的他的方法都放在自己的类中,虽然是一些空方法,不用具体的实现,但是看起来也是特别让人感觉到火大的,所以我们用了一个抽象类作为了一个适配器,下面来看代码。
package adapter;public interface BestRestaurant {public void havebeef();public void haveIceCream();public void haveRedWine();public void havePizza();public void haveGooseLiver();
}
这是一个最棒的餐厅,有着各种各样的丰富料理。
package adapter;public abstract class BestRestaurantAdapter implements BestRestaurant {public void havebeef() {};public void haveIceCream() {};public void haveRedWine() {};public void havePizza() {};public void haveGooseLiver() {};
}
通过抽象类作为一个适配器,实现最好的餐厅接口。
package adapter;public class BestResaurantMy extends BestRestaurantAdapter{@Overridepublic void havebeef() {System.out.println("这里有牛肉");}@Overridepublic void haveRedWine() {System.out.println("这里有红酒");}}
继承一下刚刚的抽象类,这样我们只需要实现自己想要的方法就可以了。不必再把那些没用的空方法一并放进来。
package adapter;public class Client {public static void main(String[] args) {BestRestaurant br =new BestResaurantMy();br.havebeef();br.haveRedWine();}}
最后调用一下就大功告成了。
后记
最近公司实在是太忙,因为项目快要上线了,所以一直就耽搁没有进行更新,现在生物钟又回到正轨上了,要继续拿起书本不断进步学习,生命不息,学习不止。
相关文章:

1041 Be Unique
1.依旧是散列题,开一个整形的哈希数组bets[10010]来计数,最后数目为1的,也就是unique 2.注意,可能为1的不止一个,要输出第一个输入的unique,那么需要记录下读入的顺序,可以开辟一个数组inputs[…

SWT图像处理入门
SWT图像处理入门 Standard Widget Toolkit ( SWT ,标准窗口小部件工具箱),是在 Eclipse 平台上使用的窗口小部件工具箱,它能向开发者提供和本机平台一致的用户界面和比较稳定的性能,也提供了强大的图像处理功能。本文首先介绍 SWT…

MyEclipse中的快捷键
MyEclipse 快捷键1(CTRL)-------------------------------------Ctrl1 快速修复CtrlD: 删除当前行 CtrlQ 定位到最后编辑的地方 CtrlL 定位在某行 CtrlO 快速显示 OutLine CtrlT 快速显示当前类的继承结构 CtrlW 关闭当前Editer CtrlK 快速定位到下一个 CtrlE 快速显示当…

CocoaPods原理(一)
CocoaPods介绍 CocoaPods 是开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具。利用 CocoaPods,可以定义自己的依赖关系 (称作 pods),并且随着时间的变化,以及在整个开发环境中对第三方库的版本管理非常方便。 CocoaPods 背后的理念主…

1055 The World‘s Richest
开始的做法是,对于每一个case,都在整个person数组内进行遍历,把所有年龄符合要求的都放进一个临时数组,然后对临时数组进行排序,再根据要求的数目输出。但是这么做会有一个测试用例因为超时而通不过。 穷则思变。于是…

IOS时间传递机制简记
事件传递顺序:自定义View -- > UIview --> RootViewController --> UIWindow -->UIApplication -->Appdelegate -->nil 注: //分发事件,将当前的触摸事件分发给当前对象的下一个响应者 //如果当前对象处理了当前事件&am…

HDOJ2270(How Many Friends Will Be Together With You)
#include <iostream>using namespacestd;const int MAX 1000005;intfr[MAX];intmain(){ int n, i, tt, sum; while(cin>>n) { for(i 1; i < n; i) fr[i] i;//初始化,一开始每个都是独立的,并无朋友 …

在linux环境下重启oracle数据库,解决密码过期的问题
(1) 以oracle身份登录数据库,命令:su – oracle (2) 进入Sqlplus控制台,命令:sqlplus /nolog (3) 以系统管理员登录,命令:connect /as…

1075 PAT Judge
1. 这一题一开始,为了同一个人的数据更新得方便,我把id从字符串转化成整数,作为数组下标,但是注意了,每个学生还是要有字符串的id属性(根据下标得到),因为后面一旦排序,数组下标就毫无意义了。 …

MySQL 错误代码和消息
本章列出了当你用任何主机语言调用MySQL时可能出现的错误。首先列出了服务器错误消息。其次列出了客户端程序消息。 B.1. 服务器错误代码和消息 服务器错误信息来自下述源文件: 错误消息信息列在share/errmsg.txt文件中。“%d”和“%s”分别代表编号和字符…

一步步学习汇编(8)之指令
要理解ret,retf,call指令,必须要先理清以下汇编基础知识: 一. [bx]和内存单元<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />[bx]是什么呢? 和[0]有些类似…

【转】不分主副卡!全网通5.0时代到来
全网通在今天已经不是噱头了,它经历了有5年时间,从过去的全网通1.0到现在的全网通5.0,可以说有这长足的发展。今年,小米率先了支持全网通5.0的小米MIX 2S和红米Note5,可以双卡双待4G,一边打电话一边打游戏不…

1048 Find Coins(散列解法)
1. 开始测试点3答案错误,看参考书发现是,读题时根据硬币最大面值500设置的数组大小,但是后来会用总面值减去硬币面值,这个大小在[1,999),因此散列表的大小应该设为1010。 2. 学会了一个小技巧。main函数可以不止一处r…

简单ThreadPool实现
由于最近需要用多线程处理一些问题,一开始我用了.net默认的ThreadPool,感觉不是很适合。于是我自己实现了一个简单的ThreadPool。 写的比较简单,有兴趣的朋友一起看看,共同改进。 代码主要由ThreadPoolEx,WorkItem,WorkQueue组成。…

CSS中强大的EM
使用CSS也好久了,但一直都是在使用“px”来设置Web元素的相关属性,未敢使用“em”。主要原因是,对其并不什么了解,只知道一点概念性的东西,前段时间在项目中要求使用“em”作为单位设置元素,所以从头对“em…

16.1、python初识面向对象(1)
初识面向对象 楔子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能&#…

1080 Graduate Admission
1.因为这道题第一次认真想了高考录取的规则,对学生按照先总分再gE的原则进行从高到低排序,排名允许重复。再按照排名高到低对每个学生的每个志愿进行遍历,当一个学生处理完,再进行下一个。 2.由于最后是要输出学生的原始序号&…

vc++实现无进程无DLL无硬盘文件无启动项的ICMP后门后门程序
客户端 #include <winsock2.h>#include <stdio.h>#include <stdlib.h> #pragma comment(lib,"ws2_32.lib") char SendMsg[256]; /* The IP header */typedef struct iphdr {unsigned int h_len:4; //4位首部长度unsigned int version:4; //IP版本…

arm linux 启动之一:汇编启动到start_kernel
描述arm linux启动的概要过程,以S5PV210(Cortex A8)为例,本文描述第一个阶段。 一、arm linux的引导 uboot在引导arm linux(uImage镜像)到SDRAM之后,通过bootm命令对uImage镜像的64个字节头进行解释,获取li…

Sql Server 因为触发器问题导致数据库更新报错“在触发器执行过程中引发了错误,批处理已中止”的问题处理...
在维护一个非常旧的项目时,由于该项目版本已经非常老了,而且在客户现场运行的非常稳定,更要命的是本人目前没有找到该项目的代码,为了处理一个新的需求而且还不能修改程序代码,于是决定从数据库入手,毕竟该…

1070 Mooncake
1. 一道典型的贪心题,策略是尽可能地多出售单价高的月饼。 2. 开始有一个用例没有通过,看了参考书,说是质量虽然给的都是整数,但是为了计算不出错,需要声明为浮点型。改了以后果然就通过了,但是个中原理不…

Java数组合并,完成排序,从时间复杂度,和空间复杂度考虑
2019独角兽企业重金招聘Python工程师标准>>> 提供方法,直接调用,支持任意个数组的合并成一个数组,并且完成排序,每个数组元素个数不定。需要提供两个方法,分别做到时间复杂度最低、空间复杂度最低。并说明两…

WPF中Auto与*的差别
Auto 表示自己主动适应显示内容的宽度, 如自己主动适应文本的宽度,文本有多长,控件就显示多长. * 则表示按比例来分配宽度. <ColumnDefinition Width"3*" /> <ColumnDefinition Width"7*" /> 相同,行能够这样定义 <RowDefinition Height&qu…

个人电脑优化方案
2009年4月13日 文件删除--系统默认磁盘清理--批处理清除无用文件--使用优化软件如优化大师 Codeecho off echo 正在清除系统垃圾文件,请稍等 del /f /s /q %systemdrive%\*.tmp del /f /s /q %systemdrive%\…

1037 Magic Coupon
1. 贪心算法题,贪心策略:两组乘子相乘,每个数字至多用一次,希望得到最大的乘积。那么让A组绝对值最大的正数和B组最绝对值最大的正数相乘,次大的和次大的相乘……同样的让A组绝对值最大的负数和B组绝对值最大的负数相乘…

综合布线系统入门及应用(二)
一、工程材料用量估计 1、信息模块及水晶头用量统计 信息插座与工位数量1:1,在增加5%的余量 跳线:一般需要2条,工位信息面板到设备,交换机到配线架,每根条线2个水晶头,预留10%-15%。 2、线槽用量统计 根据办…

如何查看服务器有多少网站--免费工具
一台虚拟主机上到底有多少个网站或者说同一ip下有多少个域名和网站?这是站长们都很关心的,因为这样可以知道你的站到底和谁是邻居,有时候如果你和百度黑名单上的垃圾站在同一空间下,你也会受到牵连。 那么怎 ...中间左侧广告 一台…

二分法在算法题中的4种常见应用(cont.)
目录 1.查找单调序列中是否存在满足某条件的元素 2.寻找序列中第一个(最后一个)满足某条件的元素的位置 3.给定一个定义在[L,R]上的单调函数f(x),求方程f(x)0的根 4.快速幂的递归和迭代求法 1.查找单调序列中是否存在满足某条件的元素 //二分区间为左闭右闭的[l…

Minimum Path Sum
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path. Note: You can only move either down or right at any point in time. 格子取数问题,另dp[i][j]表示走…

Thorntail 2.2.0提供从WildFly Swarm自动迁移的特性
自6月底宣布把WildFly Swarm2018.5.0改名为Thorntail2.0.0以来,Red Hat在8月中旬以后的三个周里发布了Thorntail 2.1.0版本和2.2.0版本。除了许多Bug修复外,尤其是和MicroProfile相关的,新特性还包括:\\符合MicroProfile 1.3\通过…