外观模式

外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

外观模式,通过外观的包装,只对外暴露外观对象,屏蔽具体的细节,降低了程序的复杂度,提高了程序的可维护性,体现了迪米特法则。

外观模式主要涉及2部分:

  1. 外观类:知道哪些具体类负责处理请求,将客户的请求代理给适当的具体对象。
  2. 具体类:实现具体功能,处理外观对象指派的任务。

果汁店提供苹果橘子汁、橘子西瓜汁等其他果汁,消费者购买的时候只关心果汁店是否提供了一杯完整的果汁,而不关心这杯果汁是怎么来的。在这里,果汁店起到了外观类的作用,果汁店提供苹果橘子汁、橘子西瓜汁这两种方法,苹果、橘子、西瓜是具体类,均实现了榨汁这个操作。

外观模式_第1张图片
外观模式类图
  • 苹果
public class Apple {
    public void juicing() {
        System.out.println("apple juicing");
    }
}
  • 橘子
public class Orange {
    public void juicing() {
        System.out.println("orange juicing");
    }
}
  • 西瓜
public class Watermelon {
    public void juicing() {
        System.out.println("watermelon juicing");
    }
}
  • 果汁店
public class FruitJuiceShop {
    private Apple apple;
    private Orange orange;
    private Watermelon watermelon;

    public FruitJuiceShop() {
        apple = new Apple();
        orange = new Orange();
        watermelon = new Watermelon();
    }

    public void appleOrangeJuice() {
        System.out.println("apple orange juice :");
        apple.juicing();
        orange.juicing();
    }

    public void orangeWatermelonJuice() {
        System.out.println("orange watermelon juice :");
        orange.juicing();
        watermelon.juicing();
    }
}
  • 客户端测试类
public class Client {
    public static void main(String[] args) {
        FruitJuiceShop fruitJuiceShop = new FruitJuiceShop();
        fruitJuiceShop.appleOrangeJuice();
        fruitJuiceShop.orangeWatermelonJuice();
    }
}

运行结果:
apple orange juice :
apple juicing
orange juicing
orange watermelon juice :
orange juicing
watermelon juicing

外观模式通常应用在新老系统的交互上,新系统提供一个外观类来与遗留代码来完成所有复杂工作交互。

你可能感兴趣的:(外观模式)