zoukankan      html  css  js  c++  java
  • 门面模式

    上一篇的java标准日志出现了日志门面,肯定有人会问什么是门面?


    1. 门面模式(Facade Pattern)

    门面提供统一的接口去访问多个子系统的不同接口,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。简单地说:通过门面就可使用该系统所有的功能,而不用接触背后复杂的关系


    门面模式的组成:

    • Client(客户)
    • Facade(门面角色)
    • Subsystem(子系统)




    2. 流程

    这里举例看电影的场景,以前看电影需要去电影院看上映列表,然后买电影票,最后买爆米花,客户需接触三个流程。

    现通过手机门面我们可将上面三步完成,而只需接触手机这个门面即可


    2.1 Subsystem

    // 观影系统
    public class MoviesSystem {
        public void listMovies() {
            System.out.println("上映列表");
        }
        // other funtion ...
    }
    

    // 购票系统
    public class TicketSystem {
        public void buyTicket() {
            System.out.println("买电影票");
        }
        public void refundTicket() {
            System.out.println("退电影票");
        }
        // other funtion ...
    }
    

    // 服务系统
    public class ServiceSystem {
        public void buyPopCorn() {
            System.out.println("买爆米花");
        }
        public void buyCola() {
            System.out.println("买可乐");
        }
        // other funtion ...
    }
    


    2.1 Facade

    public class Facade {
        MoviesSystem moviesSystem = new MoviesSystem();
        TicketSystem ticketSystem = new TicketSystem();
        ServiceSystem serviceSystem = new ServiceSystem();
    
        public void watchMovie(){
            moviesSystem.listMovies();
            ticketSystem.buyTicket();
            serviceSystem.buyCola();
        }
    }
    


    2.3 Client

    public class Client {
        public static void main(String[] args) {
            Facade facade = new Facade();
            facade.watchMovie();
        }
    }
    
    // 观影列表
    // 买电影票
    // 买可乐
    




    3. 优势

    • 门面让客户和子系统松耦合,所以子系统更容易扩展和维护
    • 门面让子系统有统一上层接口,所以客户容易使用,也可自由更改子系统实现(参考日志门面)


  • 相关阅读:
    angular 组件间数据共享
    Linux 常用命令
    angular 子路由跳转出现Navigation triggered outside Angular zone, did you forget to call ‘ngZone.run() 的问题修复
    angular :ngIf 的else用法
    利用 filter 来去重
    webpack打包时删除console.log,和debugger
    git忽略而不提交文件的3种情形
    jenkins 构建日程表配置
    vue之多页面的开发
    vue-cli3使用jq
  • 原文地址:https://www.cnblogs.com/Howlet/p/15057145.html
Copyright © 2011-2022 走看看