设计模式 - 适配器模式(adapter pattern) 具体解释
2016-02-05 18:37
471 查看
适配器模式(adapter pattern) 详细解释
本文地址: http://blog.csdn.net/caroline_wendy适配器模式(adapter pattern): 将一个类的接口, 转换成客户期望的还有一个接口. 适配器让原本不兼容的类能够合作无间.
适配器模式(adapter pattern)主要包含:
1. 被适配者接口(adaptee interface): 须要被适配的接口.
2. 适配器(adapter): 转换的类;
3. 目标接口(target interface): 须要转换成为的接口.
4. 客户(client): 详细使用的类.
详细方法:
1. 被适配者(adaptee interface)接口, 和实现接口详细的类.
/** * @time 2014年6月17日 */ package adapter; /** * @author C.L.Wang * */ public interface Turkey { public void gobble(); public void fly(); } /** * @time 2014年6月17日 */ package adapter; /** * @author C.L.Wang * */ public class WildTurkey implements Turkey { /* (non-Javadoc) * @see adapter.Turkey#gobble() */ @Override public void gobble() { // TODO Auto-generated method stub System.out.println("Gobble gobble! "); } /* (non-Javadoc) * @see adapter.Turkey#fly() */ @Override public void fly() { // TODO Auto-generated method stub System.out.println("I'm flying a short distance! "); } }
2. 目标接口(target interface), 和实现接口详细的类.
/** * @time 2014年6月17日 */ package adapter; /** * @author C.L.Wang * */ public interface Duck { public void quack(); public void fly(); } /** * @time 2014年6月17日 */ package adapter; /** * @author C.L.Wang * */ public class MallardDuck implements Duck { /* (non-Javadoc) * @see adapter.Duck#quack() */ @Override public void quack() { // TODO Auto-generated method stub System.out.println("Quack! "); } /* (non-Javadoc) * @see adapter.Duck#fly() */ @Override public void fly() { // TODO Auto-generated method stub System.out.println("I'm flying! "); } }
3. 适配器(adapter): 被适配者接口(adaptee interface) 转换 目标接口(target interface).
组合被适配者类接口, 实现目标类接口.
/** * @time 2014年6月17日 */ package adapter; /** * @author C.L.Wang * */ public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter (Turkey turkey) { this.turkey = turkey; } /* (non-Javadoc) * @see adapter.Duck#quack() */ @Override public void quack() { // TODO Auto-generated method stub turkey.gobble(); } /* (non-Javadoc) * @see adapter.Duck#fly() */ @Override public void fly() { // TODO Auto-generated method stub for (int i=0; i<5; ++i) { //多次飞行 turkey.fly(); } } }
4. 客户(client)方法须要使用目标类,
把被适配者(adaptee)的详细类, 通过适配器(adapter), 转换为目标(target)类, 进行调用:
/** * @time 2014年6月17日 */ package adapter; /** * @author C.L.Wang * */ public class DuckTestDrive { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub MallardDuck duck = new MallardDuck(); WildTurkey turkey = new WildTurkey(); Duck turkeyAdapter = new TurkeyAdapter(turkey); System.out.println("The Turkey says ..."); turkey.gobble(); turkey.fly(); System.out.println("\nThe Duck says ..."); testDuck(duck); System.out.println("\nThe TurkeyAdapter says ..."); testDuck(turkeyAdapter); } static void testDuck (Duck duck) { duck.quack(); duck.fly(); } }
5. 输出.
The Turkey says ... Gobble gobble! I'm flying a short distance! The Duck says ... Quack! I'm flying! The TurkeyAdapter says ... Gobble gobble! I'm flying a short distance! I'm flying a short distance! I'm flying a short distance! I'm flying a short distance! I'm flying a short distance!
相关文章推荐
- 通知与消息机制
- UVa--725 Division(枚举)
- Python教程学习简记4--Python 迭代(iteration)
- 图(最小生成树) MST 5
- Android 框架练成 教你打造高效的图片加载框架 (转)
- JavaScript面向对象:分页器类封装
- 数据结构(4)--循环链表的应用之约瑟夫环问题以及线性表总结之顺序表与链表的比较
- 201 Bitwise AND of Numbers Range
- Linux驱动开发盲点笔记1
- 线性表之--链表、栈、队列
- office 2013
- 如何使用JMeter来实现更大批量的并发的解决方案(即如何设置controller和Agent)
- UITableView全面解析
- nyoj399整除个数
- nginx报错 client intended to send too large body: 1331696 bytes
- Oracle 获取本周、本月、本季、本年的第一天和最后一天
- Android SurfaceView实战 打造抽奖转盘 (转)
- 获取文本字符串的长度
- iOS 内存管理
- iOS--多线程开发