美文网首页
适配器模式和外观模式

适配器模式和外观模式

作者: 狐尼克朱迪 | 来源:发表于2016-10-22 14:16 被阅读0次

适配器模式

定义

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

使用场景

  • 想使用一个现有的类,它的接口不匹配你需要的
  • 想要创建一个可重用的类,它与不相关或不可预见的类协作,即不一定具有兼容接口的类
  • 需要使用几个现有的子类,但通过子类化每个子类来调整其接口是不切实际的。 对象适配器可以适应其父类的接口。

例子

船长可以指挥战舰(BatteShip)去战斗,但是现在有条渔船也想加入战斗,需要对其接口进行适配。
战舰需要实现fire和move接口:

public interface BattleShip {
  void fire();
  void move();
}

渔船没有fire和move接口,只有航行sail和捕鱼fish接口:

public class FishingBoat {
  public void sail() {
    System.out.println("The Boat is moving to that place");
  }
  public void fish() {
    System.out.println("fishing ...");
  }
}

对FishingBoat进行适配,实现BatteShip的接口:

public class BattleFishingBoat implements BattleShip {
  private FishingBoat boat;

  public BattleFishingBoat() {
    boat = new FishingBoat();
  }

  public void fire() {
    System.out.println("fire!");
  }

  public void move() {
    boat.sail();
  }
}

船长可以发号实施move和fire行为,它需要一个BattleShip作为目标:

public class Captain implements BattleShip {
  private BattleShip battleship;

  public Captain() {}

  public Captain(BattleShip battleship) {
    this.battleship = battleship;
  }

  public void setBattleship(BattleShip battleship) {
    this.battleship = battleship;
  }

  public void fire() {
    battleship.fire();
  }

  public void move() {
    battleship.move();
  }
}

现在船长可以对渔船发号命令,进行move、fire操作:

public class App {
  public static void main(String[] args) {
    Captain captain = new Captain(new BattleFishingBoat());
    captain.move();
    captain.fire();
  }
}

分析

适配器模式,可以说是将一个接口转成另一个接口;而装饰者模式不修改接口,但加入责任。

外观模式

定义

提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

例子

一个简单例子:

public float getTemp(){
    return station.getThermometer().getTemperature();
}

上面的例子中,我们先从气象站(station)取得温度计(thermometer),然后通过温度计获得温度;这样相当于程序依赖两个对象:气象站和温度计。
入股在气象站中加紧一个方法,用来向温度计请求温度,那么和我们的相关的对象就只有气象站一个了:

public float getTemp(){
    return station.getTemperature();
}

分析

外观模式复合设计模式中的最少知识原则只和你的密友谈话。这个原则的意思是不要让太多的类耦合在一起,免得修改系统中一部分会影响到其他部分。

参考

iluwatar/java-design-patterns

相关文章

  • 设计模式:结构型

    享元模式 (Pools,Message) 代理模式 适配器模式 :类适配器和对象适配器 装饰者模式 外观模式 桥接...

  • 设计模式(java)- 模版方法模式

    之前学习的是适配器模式与外观模式。 对外观模式与适配器模式的理解 适配器模式的意思就是适配,将三孔插座转换为二孔插...

  • 设计模式的分类

    接口型模式 适配器模式 外观模式 组合模式 桥接模式

  • 设计模式(结构型模式)

    适配器模式、 装饰器模式、 代理模式、 外观模式、 桥接模式、 组合模式、 享元模式 适配器模式 即定义一个包装类...

  • 结构模式

    结构型模式包括:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式。其中对象的适配器模式是各种...

  • 结构型模式

    结构型模式有七种:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式。其中对象的适配器模式是各...

  • 设计模式之结构型模式(下)

    上篇已经介绍了适配器模式、桥接模式和组合模式,这篇将介绍装饰者模式、外观模式、享元模式和代理模式。 装饰者(Dec...

  • Java中的23种设计模式(二)

    (适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式)原文作者:终点 出处:Java之美[...

  • iOS设计模式

    设计模式:MVC模式、单例模式、观察者模式、工厂模式、代理模式、策略模式、适配器模式、模版模式、外观模式、创建模式...

  • Java设计模式

    接口型模式适配器 模式外观模式合成模式桥接 模式职责型模式单例 模式观察者<...

网友评论

      本文标题:适配器模式和外观模式

      本文链接:https://www.haomeiwen.com/subject/wothuttx.html