设计模式之适配器模式&外观模式
来源:互联网 发布:知豆电动汽车电池质保 编辑:程序博客网 时间:2024/05/21 11:20
OO适配器将一个接口转换为另一个接口,以符合客户的需求。
Duck和Turkey之间的关系。。。
public interface Duck {public void quack();public void fly();}
public class MallardDuck implements Duck{public void quack(){System.out.println("Quack");}public void fly(){System.out.println("im flying");}}
public interface Turkey {public void gobble();public void fly();}
public class WildTurkey implements Turkey{public void gobble(){System.out.println("Gobble gooble");}public void fly(){System.out.println("im flying a short distance");}}
public class TurkeyAdapter implements Duck{Turkey turkey;public TurkeyAdapter(Turkey turkey){this.turkey=turkey;}public void quack(){turkey.gobble();}public void fly(){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();}}
result:
The turkey says...Gobble goobleim flying a short distanceThe duck says...Quackim flyingThe turkeyAdapter says...Gobble goobleim flying a short distanceim flying a short distanceim flying a short distanceim flying a short distanceim flying a short distance
适配器让原本接口不兼容的类可以合作无间。
以上是对象的适配器,还有类的适配器
比如旧世界的枚举器Enumeration适配到新世界的迭代器Iterator,编写一个EnumerationIterator适配器
public class EnumerationIterator implements Iterator{Enumeration enum;public EnumerationIterator(Enumeration enum ){this.enum=enum;}@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn enum.hasMoreElement();}@Overridepublic Object next() {// TODO Auto-generated method stubreturn enum.nextElement();}@Overridepublic void remove() {// TODO Auto-generated method stubthrow new UnsupportedOperationException();}}
类似的还有一种模式,外观模式,提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更加容易使用。
比如家庭影院系统就很适合。
Facade并没有封装子系统的类,只是提供简化的接口,所以你可以直接使用子系统的类。也允许你将客户实现从任何子系统中解耦。
外观和适配器可以包装很多类,但是前者的意图是简化接口,而后者是将接口转换成不同接口。
涉及到一个设计原则:最少知识原则。也就是不要让太多的类耦合在一起。
0 0
- 设计模式之--适配器模式、外观模式
- 设计模式之适配器模式&外观模式
- 设计模式之适配器、外观模式
- 设计模式之适配器与外观模式
- php 设计模式之 代理模式,适配器模式,外观模式
- 深入浅出设计模式之命令模式、适配器模式、外观模式
- 设计模式之适配器模式与外观模式
- 设计模式之适配器模式、外观模式浅析
- Head First 设计模式之适配器模式与外观模式
- 设计模式之适配器模式和外观模式
- 设计模式之适配器模式和外观模式
- 设计模式之适配器模式与外观模式
- 【设计模式】1. 适配器模式、外观模式
- 设计模式 - 适配器模式、外观模式
- 设计模式(适配器模式,外观模式)
- 设计模式--适配器模式和外观模式
- 设计模式--适配器模式与外观模式
- 设计模式-适配器模式与外观模式
- 浅谈ANR及如何分析解决ANR(2)
- 重温struts2之类型转换
- quick-cocos2d-x图片资源加密 (转)
- c13
- Leetcode_permutation-sequence(c++ and python version)
- 设计模式之适配器模式&外观模式
- 浅谈ANR及如何分析解决ANR(3)
- 对话框
- EXPORT_SYMBOL宏
- 又一HTML编辑器Simditor
- 数据结构——bitmap
- 黑马程序员笔记——Java基础
- 问:如何打包.ipa,然后用Application Loader提交到app store?
- java多线程(一) 创建和启动