外观模式

作者: 红狮子座 | 来源:发表于2017-03-23 13:40 被阅读51次

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

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

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

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

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

    外观模式类图
    • 苹果
    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

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

    相关文章

      网友评论

      • 6b0ed4356282:你好, 請問你的類圖是用什麼軟體做成的呢
        6b0ed4356282:@红狮子座 ok 了解了 感謝
        红狮子座:IntelliJ IDEA 根据类代码自动生成的类图。不过貌似该工具有一定的缺陷,在聚合关系方面的表示有点问题

      本文标题:外观模式

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