博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
给女友讲讲设计模式——适配器模式(JAVA实例)5
阅读量:6501 次
发布时间:2019-06-24

本文共 3077 字,大约阅读时间需要 10 分钟。

前言

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

正文

说起适配器模式,主要可以分为三种 : “类适配” ,“对象适配” ,“接口适配”。类适配与对象适配及其相似,接口适配相对有些出入。

下面就代码进行讲解一下。

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

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

后记

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

转载地址:http://nstyo.baihongyu.com/

你可能感兴趣的文章
mvc学习地址
查看>>
masonry 基本用法
查看>>
使用openssl创建自签名证书及部署到IIS教程
查看>>
Word产品需求文档,已经过时了【转】
查看>>
dtoj#4299. 图(graph)
查看>>
关于网站的一些js和css常见问题的记录
查看>>
zabbix-3.4 触发器
查看>>
换用代理IP的Webbrowser方法
查看>>
【视频编解码·学习笔记】7. 熵编码算法:基础知识 & 哈夫曼编码
查看>>
spark集群安装部署
查看>>
MySql 查询表字段数
查看>>
mariadb 内存占用优化
查看>>
Centos7安装编译安装zabbix2.219及mariadb-5.5.46
查看>>
Visual Studio Remote Debugger(for 2005/2008) .net远程调试<转>
查看>>
怎么获得combobox的valueField值
查看>>
浅谈C/C++中的static和extern关键字
查看>>
Console-算法[if,while]-一输入两个正整数m和n,求其最大公约数和最小公倍数
查看>>
浅谈网络协议(四) IP的由来--DHCP与PXE
查看>>
jre与jdk的区别
查看>>
全景图的种类
查看>>