适配器模式
来源:互联网 发布:ubuntu灰色壁纸 编辑:程序博客网 时间:2024/06/05 21:58
适配器模式:当需要使用一个现有的类而其接口不符合你的需要时,就需要使用适配器。将一个类的接口,转换成客户期望的另一个接口。适配器让原本不兼容的类可以合作无间。
举个栗子:
现在,假设你缺鸭子对象,想要用一些火鸡对象来冒充。显而易见,因为火鸡的接口不同,所以我们不能公然拿来用,所以,就写个适配器吧:
鸭子接口:
Duck.java 类:
/** * 鸭子接口 */public interface Duck { public void quack(); // 具备呱呱叫 public void fly(); // 具备飞行能力}
鸭子具体实现:
MallardDuck.java 类:
public class MallardDuck implements Duck { @Override public void quack() { System.out.println("Quack"); } @Override public void fly() { System.out.println("I'm flying"); }}
火鸡接口:
Turkey.java 类:/** * 火鸡接口 */public interface Turkey { public void gobble(); // 火鸡不会呱呱叫,只会咯咯叫 public void fly(); // 火鸡会飞,但飞不远}
火鸡具体实现类:
WildTurkey.java 类:/** * 火鸡的一种具体实现 */public class WildTurkey implements Turkey { @Override public void gobble() { System.out.println("Gobble gobble"); } @Override public void fly() { System.out.println("I'm flying a short distance"); }}
假如现在,我们缺少鸭子的具体实现类MallardDuck.java,因此,我们需要用火鸡WildTurkey去冒充鸭子,因此,实现的适配器如下:
TurkeyAdapter.java 类:public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } @Override public void quack() { // 这里用火鸡的咯咯,冒充鸭子的嘎嘎 turkey.gobble(); } @Override public void fly() { // 火鸡的飞行距离很近,要让鸭子的飞行和火鸡的飞行能够对应,必须连续5次调用火鸡的fly() for(int i = 0; i<5;i++) { turkey.fly(); } }}
编写一个测试类:
DuckTestDrive.java 类:
public class DuckTestDrive { public static void main(String[] args) { 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(); }}
分析:
1、针对接口编程,而不针对具体的实现编程,因此,看到我们都是用接口去调用具体的实现类。
2、适配器的基本核心,其实就是写了一个适配器类实现需要适配的接口,然后把需要适配的接口当成字段,写一个构造器将该接口具体的实现传给该接口,然后适配器中去实现适配的接口的各个方法即可。阅读全文
0 0
- 适配器及适配器模式
- 适配器及适配器模式
- 适配器模式(类适配器)
- 适配器模式(默认适配器)
- 适配器模式(对象适配器)
- 适配器模式-类适配器
- 适配器模式-对象适配器
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- UIButton的自动排列
- Webbbbbb
- 【bzoj1968】 [Ahoi2005]COMMON 约数研究
- 算术运算
- 【Excel-2010】瀑布图
- 适配器模式
- 杂谈:跨行业的软件思考
- 其他题目---在两个长度相等的排序数组中找到上中位数
- linux简介
- WordCountMapReduce 代码
- PTA 龟兔赛跑
- 利用shader做玻璃效果
- 纯CSS绘制三角形(各种角度)
- 数据大小溢出时相应的原码、反码与补码表示