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 设计模式》
  • 相关阅读:
    js监听手机端点击物理返回键或js监听pc端点击浏览器返回键
    mysql存储emoji问题
    windows环境下 php 将office文件(word/excel/ppt)转化为pdf
    javascript 获取多种主流浏览器显示页面高度
    iframe 加载外部资源,显示隐藏loading,onload失效
    ubuntu 忽略文件的50unattended升级问题
    ubuntu apt 软件源的更改
    Python3.6连接mysql(一)
    H5图片预览、压缩、上传
    前端如何上传图片到七牛云
  • 原文地址:https://www.cnblogs.com/wei57960/p/12990079.html
Copyright © 2011-2022 走看看