给女友讲讲设计模式——适配器模式(JAVA实例)5
前言
有这样一个人,看到别人一个个开餐馆赚了好多钱,于是自己也很想在餐饮业这方面大展拳脚,他从别人那里学到了他们的理念,还学习到了他们真正开店的经验。不但如此,他还引进了除了吃饭意外其他的服务,例如说提供了本该是酒吧才有的歌手驻场来提供好的就餐氛围这样的服务。正因为如此,生意做得生龙活虎。
正文
说起适配器模式,主要可以分为三种 : “类适配” ,“对象适配” ,“接口适配”。类适配与对象适配及其相似,接口适配相对有些出入。
下面就代码进行讲解一下。
package adapter; public interface Restaurant { public void haveFood(); public void haveDrink(); }
这是一个餐厅的接口,有食物,也有饮料。
package adapter; public class RestaurantImpl implements Restaurant{ @Override public void haveFood() { System.out.println("提供各种美食"); } @Override public void haveDrink() { System.out.println("提供各种饮料"); } }
我们是实现了这个接口,让他有具体的实际意义。
package adapter; public interface Bar { public void haveSong(); }
酒吧接口,提供了一个唱歌驻唱的服务。
package adapter; public class MyRestaurantAdapter extends RestaurantImpl implements Bar{ @Override public 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(); } @Override public 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{ @Override public void havebeef() { System.out.println("这里有牛肉"); } @Override public void haveRedWine() { System.out.println("这里有红酒"); } }
继承一下刚刚的抽象类,这样我们只需要实现自己想要的方法就可以了。不必再把那些没用的空方法一并放进来。
package adapter; public class Client { public static void main(String[] args) { BestRestaurant br =new BestResaurantMy(); br.havebeef(); br.haveRedWine(); } }
最后调用一下就大功告成了。
后记
最近公司实在是太忙,因为项目快要上线了,所以一直就耽搁没有进行更新,现在生物钟又回到正轨上了,要继续拿起书本不断进步学习,生命不息,学习不止。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
使用C#创建windows服务
前言: 前段时间因为项目上需要用到实现一个简答的卫星云图播放功能,因此需要将卫星云图实时下载到本地目录。当时也没多想,直接就用控制台程序开发了一个卫星云图自动下载工具。最近项目不是很忙了,静下心重新看了一下项目代码,对部分代码进行了重构...... 同时也发现了卫星云图下载工具的问题,总不能每次客户使用的时候都让客户去跑一遍控制台程序或者一直运行这个控制台程序吧。于是打算把卫星云图下载工具写成服务的形式,这样就不用担心卫星云图的实时性了。 说干就干! 开发环境: 操作系统:Windows 10 X64 开发环境:VS2017 编程语言:C# .NET版本:.NET Framework 4.5 目标平台:X86 Windows Service简介: 一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序。Windows服务程序虽然是可执行的,但是它不像一般的可执行文件通过双击就能开始运行了,它必须有特定的启动方式。这些启动方式包括了自动启动和手动启动两种。对于自动启动的Windows服务程序,它们在Windows启动或是重启之后用户登录之前就开始执行了。只...
- 下一篇
java中的驼峰转换为下划线的方法
驼峰转换为下划线的方法 /** * 驼峰转下划线 * * @param str * @return */ public static String camelToUnderline(String str) { if (str == null || str.trim().isEmpty()){ return ""; } int len = str.length(); StringBuilder sb = new StringBuilder(len); sb.append(str.substring(0, 1).toLowerCase()); for (int i = 1; i < len; i++) { char c = str.charAt(i); if (Character.isUpperCase(c)) { sb.append("_"); sb.append(Character.toLowerCase(c)); } else { sb.append(c); } } return sb.toString(); } https://www.aliyun.com/jiaocheng...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8安装Docker,最新的服务器搭配容器使用
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS关闭SELinux安全模块
- CentOS8编译安装MySQL8.0.19
- Hadoop3单机部署,实现最简伪集群
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7,8上快速安装Gitea,搭建Git服务器