适配器与外观模式
来源:互联网 发布:华为手机usb共享网络 编辑:程序博客网 时间:2024/05/16 19:18
适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
[]类图
对象适配器模式类图
类适配器模式类图
外观模式类图
[]适配器模式的实现
()对象适配器:采用组合方式来实现
目标接口
public interface Duck {void quack();void fly();}
目标实现类
public class MallardDuck implements Duck {@Overridepublic void quack() { System.out.println("Quack");}@Overridepublic void fly() { System.out.println("I'm flying");}}
被适配者接口
public interface Turkey {void gobble();void fly();}
被适配者实现类
public class WildTurkey implements Turkey {@Overridepublic void gobble() { System.out.println("Gobble gobble");}@Overridepublic void fly() { System.out.println("I'm flying a short distance");}}
适配器类(将Turkey当成Duck来使用)
public class TurkeyAdapter implements Duck {private Turkey turkey;public TurkeyAdapter(Turkey turkey) { this.turkey = turkey;}@Overridepublic void quack() { turkey.gobble();}@Overridepublic void fly() { turkey.fly();}}
测试
public static void main(String args[]) { Duck mallardDuck = new MallardDuck(); mallardDuck.quack(); mallardDuck.fly(); System.out.println("****************"); Turkey wildTurkey = new WildTurkey(); wildTurkey.gobble(); wildTurkey.fly(); System.out.println("****************"); Duck adapter = new TurkeyAdapter(wildTurkey); adapter.quack(); adapter.fly();}
()类适配器(java不支持多继承,无法实现):采用多继承方式来实现
类适配器继承目标类和被适配器者,重写目标类的方法并委托给被适配器者。
[]
()对象适配器采用组合方式来实现,类适配器采用多继承方式来实现。
()适配器类实现了目标接口,并持有被适配者的实例。
()使用对象组合,以修改的接口包装被适配者。被适配的任何子类,都可以搭配者适配器使用。
()对象适配器采用组合的方式,不仅可以适配某个类,也可以适配该类的任何子类。类适配器不需要重新实现整个被适配者,必要的时候,可以覆盖被适配者的行为。
外观模式:提供了一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用。
[]类图
[]外观模式的实现
子系统类
public class Amplifier {public void on() { System.out.println("amplifier on");}public void off() { System.out.println("amplifier off");}}
子系统类
public class Tuner {public void on() { System.out.println("tuner on");}public void off() { System.out.println("tuner off");}}
子系统类
public class DvdPlayer {public void player() { System.out.println("dvdPlayer player");}public void off() { System.out.println("dvdPlayer off");}}
统一接口类
public class HomeTheaterFacade {private Amplifier amplifier;private Tuner tuner;private DvdPlayer dvdPlayer;public HomeTheaterFacade(Amplifier amplifier, Tuner tuner, DvdPlayer dvdPlayer) { this.amplifier = amplifier; this.tuner = tuner; this.dvdPlayer = dvdPlayer;}public void watchMovie() { amplifier.on(); tuner.on(); dvdPlayer.player();}public void endMovie() { amplifier.off(); tuner.off(); dvdPlayer.off();}}
测试
public static void main(String args[]) { Amplifier amplifier = new Amplifier(); Tuner tuner = new Tuner(); DvdPlayer dvdPlayer = new DvdPlayer(); HomeTheaterFacade facade = new HomeTheaterFacade(amplifier, tuner, dvdPlayer); facade.watchMovie(); facade.endMovie();}
[]
()装饰者模式表示有一些新的行为或责任要加入到你的设计中,但是新的设计加入类中,而无需修改现有的代码。适配器模式主要用于接口转换。
()适配器模式是为了转换接口,外观模式是为了简化接口。
阅读全文
0 0
- 适配器与外观模式
- 适配器模式与外观模式
- 适配器模式与外观模式
- 适配器模式与外观模式
- 代理模式、外观模式与适配器模式
- 命令模式、适配器模式与外观模式
- 设计模式--适配器模式与外观模式
- 设计模式-适配器模式与外观模式
- 适配器模式与外观模式笔记
- [DesignPattern]适配器模式与外观模式
- 设计模式之适配器与外观模式
- 适配器(adapter)与外观模式(facade)
- 适配器模式&外观模式
- 适配器模式、外观模式
- 适配器模式 && 外观模式
- 适配器模式,外观模式
- 设计模式之适配器模式与外观模式
- 初识设计模式 chapter 07-适配器模式与外观模式
- GCD的基础概念
- unity中通过射线用Button控制ui的出现
- css的初始化
- Ubuntu16.04下编译打包运行MapReduce Hadoop3.0.0-alpha4
- hibernate 查询语句中提示: “xxx”列无效
- 适配器与外观模式
- 4.1(2)
- 继承
- 错误[error] 1366 解决方法
- 利用Lable控件输出九九乘法表
- linux多线程编程(2)
- 跑马灯代码
- 【第1100期】经常加班,怎么兼顾个人能力提升?
- 策略模式