前言

有这样一个人,看到别人一个个开餐馆赚了好多钱,于是自己也很想在餐饮业这方面大展拳脚,他从别人那里学到了他们的理念,还学习到了他们真正开店的经验。不但如此,他还引进了除了吃饭意外其他的服务,例如说提供了本该是酒吧才有的歌手驻场来提供好的就餐氛围这样的服务。正因为如此,生意做得生龙活虎。

正文

说起适配器模式,主要可以分为三种 : “类适配” ,“对象适配” ,“接口适配”。类适配与对象适配及其相似,接口适配相对有些出入。
下面就代码进行讲解一下。

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();}}

最后调用一下就大功告成了。

后记

最近公司实在是太忙,因为项目快要上线了,所以一直就耽搁没有进行更新,现在生物钟又回到正轨上了,要继续拿起书本不断进步学习,生命不息,学习不止。

给女友讲讲设计模式——适配器模式(JAVA实例)5相关推荐

  1. Java | 设计模式-适配器模式

    继代理模式后又来到适配器模式啦,想看之前的也有哦.持续更新中哦.让我们一起加油吧兄弟们,干他. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 你好,如果喜欢,请一起坚持!! ...

  2. Java设计模式——适配器模式【Adapter Pattern】

    一.引言 23种设计模式大概分为三大类: 5种(创建型模式):工厂方法模式.抽象工厂模式.单例模式.原型模式.建造者模式. 7种(结构型模式):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...

  3. java设计模式适配器模式_Java中的适配器设计模式

    java设计模式适配器模式 适配器设计模式是一种结构设计模式 ,可以帮助我们连接到通过不同接口公开相似功能的旧版或第三方代码. 适配器的现实世界是我们用来将USB电缆连接到以太网端口的类比. 在设计一 ...

  4. java设计模式适配器模式_Java解释器设计模式

    java设计模式适配器模式 Interpreter design pattern is one of the behavioral design pattern. Interpreter patter ...

  5. Java代码审计-设计模式-适配器模式

    Java设计模式-适配器模式(Adapter Pattern) 目录 什么是适配器模式 适配器模式的3种类型 JavaSE适配器模式的应用 Struts2适配器模式的应用 适配器模式是一种" ...

  6. 【设计模式】Java设计模式 - 适配器模式

    [设计模式]Java设计模式 - 适配器模式

  7. JAVA设计模式-适配器模式(Adapter)

    适配器模式 当我们需要一个转换头的时候,可以考虑到适配器模式 现实生活中的适配器(兼容): VGA-HDMI/充电头/插头转换/编码解码/调制解调器 系统应用场景: 老系统运行了很久比较稳定,为了保证 ...

  8. GOF23种设计模式在Java中的应用(part 2)

    本文接续part1:GOF23种设计模式在Java中的应用(part 1) 结构型模式 结构型模式: – 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结 构,用来解决更大的问题. – 分 ...

  9. GOF23种设计模式在Java中的应用(part 1)

    第二部分:GOF23种设计模式在Java中的应用(part 2) 一.GOF来源及简介 1.1 GOF23种设计模式简介 <Design Patterns: Elements of Reusab ...

最新文章

  1. 国产数据库年终大盘点
  2. 拍拍网t恤DIY效果
  3. 解决springmvc在单纯返回一个字符串对象时所出现的乱码情况(极速版)
  4. WebSphere Application Server v6中的问题诊断以及日志策略
  5. 485通信自动收发电路,历史上最详细的解释
  6. esplise自定义快捷代码补全_【Eclipse】_Eclipse自动补全增强方法 常用快捷键
  7. 如何开始使用centos_如何开始使用CentOS
  8. oracle rac openstack,利用 Chef 实现 OpenStack 块存储多节点的自动化部署
  9. 从外部访问Kubernetes集群中的应用
  10. Linux 基本操作命令
  11. [POI2012]STU-Well(二分答案+神仙操作)
  12. android开机自动启动app,android如何实现开机自动启动Service或app
  13. ensp由于win10 ARP表项未过期导致网络不通排查
  14. BASIC语言是1964年在FORTRAN语言的基础上简化而成的
  15. nxdn标准简介_标准活动介绍
  16. earn the python in hard way习题31~35的附加习题
  17. AUTOCAD使用笔记
  18. H3C设备忘记密码修改办法
  19. OPPO A35上手简评:一款中规中矩的入门级智能手机
  20. 我劝你最好别偷看我的HTTP总结

热门文章

  1. SpringMvc之@RequestParam详解
  2. 【C++】重载运算符(二)
  3. PHP Webservice的发布与调用
  4. 在apache中使用 memcache 来作 session 存储
  5. input type右对齐与只读的
  6. DataBind数据核心
  7. AWS攻略——使用CodeBuild进行自动化构建和部署静态网页
  8. 设计模式之原型模式(Prototype)摘录
  9. 【Qt】Qt再学习(二):Bars Example(Q3DBars)
  10. java gettext_JAVA中getText()怎么从一个JTextArea中读出内容?