java设计模式——适配器模式三
来源:互联网 发布:房产经纪人用什么端口 编辑:程序博客网 时间:2024/05/18 01:44
适配器模式:双向适配器
介绍:由名字可知,该适配器既可以将目标接口适配成被适配者,也可以将被适配者适配成目标接口(前者其实只是将目标接口与被适配者接口角色互换)
定义:在对象适配器的使用过程中,如果在适配器中同时包含对目标类和适配者类的对象引用(即同时依赖于被适配者类和目标接口),适配者可以通过调用目标接口中的方法,目标接口也可以通过它调用适配者类中的方法,那么该适配器就是一个双向适配器。
以下是关于双向适配器的代码示例:
public interface Duck //目标接口(因为在双向适配器模式的情况下,所以他同时也是被适配者){ public void quack(); public void Dfly();}public class ConcreteDuck implements Duck //目标接口的具体实现类(也可以说是被适配者接口的具体实现类——因为他可以有两种不同的角色:被适配者或者接口){ public void quack() { System.out.println("我是一个真正的鸭子"); } public void Dfly() { int distance=100; System.out.println("我能飞行"+distance+"米"); } }public interface Turkey { //被适配者类(同时也可以是目标接口类) public void speak(); public void Tfly();}public class wildturkey implements Turkey{ public void speak() { System.out.println("我是一个火鸡"); } public void Tfly() { int distance=20; System.out.println("我只能飞行"+distance+"米"); }}public class adapter implements Duck,Turkey //双向适配器,既实现了目标接口,又实现了被适配者接口(其实也是目标接口){ //注意:适配器类只实现目标接口(因为双向适配器,便于区分:所以说其既实现了目标接口,又实现了被适配者接口(其实被适配者接口也是目标接口)) Duck duck; Turkey turkey; public adapter(Duck duck) //此时代表turkey接口是目标接口,将duck对象进行适配 { this.duck=duck; } public void quack() { duck.quack(); } public void Dfly() { duck.Dfly(); System.out.println("我能飞行上述距离的五分之一"); //将duck适配成火鸡后们需要将其fly方法进行修改,使其实现目标接口(turkey)的飞行距离(包装——给duck穿上了turkey的衣服) } public adapter(Turkey turkey) //此时代表duck接口是目标接口,将turkey对象进行适配 { this.turkey=turkey; } public void speak() { turkey.speak(); } public void Tfly() { turkey.Tfly(); System.out.println("我能飞行上述距离的5倍"); //将火鸡适配成duck后,需要将其fly方法进行修改,使实现目标接口(duck)的飞行距离(包装——给turkey穿上了duck的衣服) }}public class client { //客户类,通过客户与目标接口进行交互(客户类不与被适配者类直接交互) public void testturkey(Turkey turkey) //说明客户想要测试turkey类 { turkey.Tfly(); turkey.speak(); } public void testduck(Duck duck) //说明客户想要测试duck类 { duck.Dfly(); duck.quack(); }}public class test { public static void main(String[] args) { // TODO code application logic here ConcreteDuck duck=new ConcreteDuck(); //创建一个具体的鸭子对象 wildturkey turkey=new wildturkey(); //创建一个具体的鸭子对象 adapter aaa=new adapter(duck); //将duck适配称火鸡 adapter bbb=new adapter(turkey); //将火鸡适配成了duck client ccc=new client(); //创建一个客户对象,根据客户需要调用鸭子还是火鸡(还是将两者进行适配后调用) ccc.testduck(aaa); System.out.println(); ccc.testturkey(bbb); } }
阅读全文
0 0
- java设计模式——适配器模式三
- JAVA设计模式——适配器模式
- java设计模式——适配器模式
- JAVA设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式——适配器模式
- Java设计模式—适配器模式
- java设计模式—适配器模式
- Java设计模式—适配器模式
- Java设计模式学习—适配器模式
- MySQL--分区表
- js防止回车(enter)键提交表单及javascript中event.keycode
- iOS NSMutableAttributedString 使用详解
- Hibernate Validator验证注解说明
- 互联网手机进下半场 靠生态化反和情怀还能挺住吗?
- java设计模式——适配器模式三
- java设计模式之工厂方法模式和抽象工厂模式
- lua 基础知识点
- Django源码学习总结
- Error Number: 1364 Field 'openid' doesn't have a default value startbbs 1.2.3
- python 读文件
- 英语带给我们什么?
- 红黑树
- 【算法】程序猿不写代码是不对的55