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. 优势

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


  • 相关阅读:
    The Python Standard Library
    Python 中的round函数
    Python文件类型
    Python中import的用法
    Python Symbols 各种符号
    python 一行写多个语句
    免费SSL证书(https网站)申请,便宜SSL https证书申请
    元宇宙游戏Axie龙头axs分析
    OLE DB provider "SQLNCLI10" for linked server "x.x.x.x" returned message "No transaction is active.".
    The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "xxx.xxx.xxx.xxx" was unable to begin a distributed transaction.
  • 原文地址:https://www.cnblogs.com/Howlet/p/15057145.html
Copyright © 2011-2022 走看看