【设计模式】学习笔记9:适配器模式(Adapter)
2013-08-13 00:19
513 查看
本文出自 http://blog.csdn.net/shuangde800
因为欧洲的插座和美国笔记本电脑的插头不一样,所以需要一个交流电适配器,通过这个美国笔记本插头就可以使用欧洲插座了。
OO适配器和真实世界的适配器扮演着同样的角色:将一个接口转换成另一个接口,以符合客户的期望。
实现一个鸭子子类:
还有一个火鸡的接口:
实现一个野生火鸡:
假设你缺少一个鸭子对象,想用火鸡对象来冒充,可以吗?
显而易见,因为火鸡的接口不同,所以不能公然拿来用
那就写一个适配器吧!
然后就可以把火鸡通过适配器给鸭子的引用使用了!
1、 适配器模式可以让不兼容的接口变成兼容的。
2、让客户从实现的接口解耦
3、适配器模式充满着良好的OO设计原则:使用对象组合,以修改的接口包装被适配者。这种方法还有额外的有点,被适配者的任何子类,都可以搭配着适配器使用
4、这个模式是如何把客户和接口绑定起来,而不是和实现绑定起来的。
适配器分为两种:
1、对象适配器
2、类适配器
类适配器需要多重继承才能实现它,在Java中是不可能的。但是在使用多重继承语言,还是可能遇到这种续期的。
下面是类适配器的类图:
对象适配器的类图:
类适配器和对象适配器的差别在于使用两种不同的适配方法,类适配器是用继承,而对象适配器是用组合。
生活中的适配器
在现实生活中,如果你需要在欧洲国家使用美国制造的笔记本电脑,那么你可能需要使用一个交流电的适配器。因为欧洲的插座和美国笔记本电脑的插头不一样,所以需要一个交流电适配器,通过这个美国笔记本插头就可以使用欧洲插座了。
OO适配器和真实世界的适配器扮演着同样的角色:将一个接口转换成另一个接口,以符合客户的期望。
第一个适配器模式
有一个鸭子接口:// 有呱呱叫和飞行的功能 public interface Duck { public void quack(); public void fly(); }
实现一个鸭子子类:
public class MallardDuck implements Duck { public void quack() { System.out.println("呱呱"); } public void fly() { System.out.println("我在飞"); } }
还有一个火鸡的接口:
public interface Turkey { public void gobble(); public void fly(); }
实现一个野生火鸡:
public class WildTurkey implements Turkey { public void gobble() { System.out.println("Gobble gobble"); } public void fly() { System.out.println("I'm flying a short distance"); } }
假设你缺少一个鸭子对象,想用火鸡对象来冒充,可以吗?
显而易见,因为火鸡的接口不同,所以不能公然拿来用
那就写一个适配器吧!
// 需要实现想转换成的类型接口 public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turykey; } public void quack() { turkey.gobble(); } public void fly() { // 火鸡飞行比较短,所以连飞5次 for(int i = 0; i < 5; ++i) { turkey.fly(); } } }
然后就可以把火鸡通过适配器给鸭子的引用使用了!
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、让客户从实现的接口解耦
3、适配器模式充满着良好的OO设计原则:使用对象组合,以修改的接口包装被适配者。这种方法还有额外的有点,被适配者的任何子类,都可以搭配着适配器使用
4、这个模式是如何把客户和接口绑定起来,而不是和实现绑定起来的。
适配器分为两种:
1、对象适配器
2、类适配器
类适配器需要多重继承才能实现它,在Java中是不可能的。但是在使用多重继承语言,还是可能遇到这种续期的。
下面是类适配器的类图:
对象适配器的类图:
类适配器和对象适配器的差别在于使用两种不同的适配方法,类适配器是用继承,而对象适配器是用组合。
相关文章推荐
- 步步为营 .NET 设计模式学习笔记 六、Adapter(适配器模式)
- 设计模式学习笔记1 - Adapter(适配器模式)
- 设计模式学习笔记(七)之适配器模式(Adapter)
- 设计模式学习笔记十一:适配器模式(Adapter Pattern)
- 设计模式学习笔记(七)之适配器模式(Adapter)
- 设计模式学习笔记——适配器模式(Adapter Patten)
- 【设计模式学习笔记七】【结构型模式】【适配器模式(Adapter)】
- 设计模式--学习笔记--适配器模式Adapter--基础篇
- 设计模式学习笔记---适配器模式adapter(Java版)
- 设计模式学习笔记(3)——适配器模式(Adapter Pattern)
- 步步为营 .NET 设计模式学习笔记 六、Adapter(适配器模式)
- 步步为营 .NET 设计模式学习笔记 六、Adapter(适配器模式)
- 设计模式学习笔记十一:适配器模式(Adapter Pattern)
- 设计模式学习(结构型模式)—适配器模式(Adapter)
- 阿Sam的设计模式学习笔记---- Adapter模式
- HeadFirst 设计模式学习笔记7--适配器模式和外观模式
- 设计模式 笔记 适配器模式 Adapter
- [设计模式笔记]二. 结构型模式--7.Adapter模式(适配器模式)(二)
- 设计模式学习笔记-适配器模式
- 设计模式学习笔记-适配器模式