zoukankan      html  css  js  c++  java
  • 设计模式之外观模式

    前言

    本节复习结构型设计模式中的外观模式。外观模式也称门面模式。

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

    代码实现

    // 子系统 Phone 提供在手机上买火车票的接口
    public class Phone {
        public void buyTicket() {
            System.out.println("buy ticket by phone ");
        }
    }
    
    
    // 子系统 Car 提供从租住地到车站的功能
    public class Car {
        public void goStation(){
            System.out.println("坐车去车站");
        }
    }   
    
    // 子系统 Bus 提供 坐公交从车站到家的功能
    public class Bus {
        public void goHome() {
            System.out.println("做公交到家了");
        }
    }
    
    // 提供给客户端的外观
    public class Facade {
        // 持有对象实例进行组合
        private Phone phone;
        private Car car;
        private Bus bus;
    
        // 通过构造器传入,并赋值对象
        public Facade(Phone phone, Car car, Bus bus) {
            this.phone = phone;
            this.car = car;
            this.bus = bus;
        }
    
        // 对外部提供从租住地一路回家的接口。不必关心具体实现
        public void goHome() {
            phone.buyTicket();
            car.goStation();
            bus.goHome();
        }
    }
    
    // 外观测试类
    public class FacadeTest {
    
        public static void main(String[] args) {
            Phone phone = new Phone();
            Car car = new Car();
            Bus bus = new Bus();
            Facade facade = new Facade(phone, car, bus);
            facade.goHome();
        }
    }
    

    UML

    外观模式UML

    外观模式不仅简化了接口,也将客户从子系统中解耦出来。外观模式的意图是简化接口,让客户使用子系统更加的方便。当然你也可以为客户提供多个外观简化子系统。

    外观模式更加体现了多用组合,少用继承这一OO原则以及松耦合。

    外观模式也体现了最少知识原则(迪米特法则):只和你的密友谈话。客户不用知道外观里面的子系统,只需要用外观提供的接口就好,不用管外观通过那些子系统实现的。

    References

    • 《Head First 设计模式》
  • 相关阅读:
    springboot、监听器
    springboot、拦截器
    Thymeleaf模板引擎
    springboot-banner.txt
    springboot,swagger2
    springboot 热部署
    判断是否为微信环境下打开的网页
    后台接收json数据
    ios 面试题
    iOS 适配问题
  • 原文地址:https://www.cnblogs.com/wei57960/p/12990079.html
Copyright © 2011-2022 走看看