适配器与外观模式

适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

[]类图

对象适配器模式类图

这里写图片描述

类适配器模式类图

这里写图片描述

外观模式类图

这里写图片描述

[]适配器模式的实现

()对象适配器:采用组合方式来实现

目标接口

public interface Duck {

void quack();

void fly();
}

目标实现类

public class MallardDuck implements Duck {

@Override
public void quack() {
    System.out.println("Quack");
}

@Override
public void fly() {
    System.out.println("I'm flying");
}
}

被适配者接口

public interface Turkey {

void gobble();

void fly();
}

被适配者实现类

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");
}
}

适配器类(将Turkey当成Duck来使用)

public class TurkeyAdapter implements Duck {

private Turkey turkey;

public TurkeyAdapter(Turkey turkey) {
    this.turkey = turkey;
}

@Override
public void quack() {

    turkey.gobble();
}

@Override
public 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();
}

[]
()装饰者模式表示有一些新的行为或责任要加入到你的设计中,但是新的设计加入类中,而无需修改现有的代码。适配器模式主要用于接口转换。
()适配器模式是为了转换接口,外观模式是为了简化接口。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值