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

    【门面模式】

    也称为 外观模式。

    要求一个子系统的外部与内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。

    门面模式注重“统一的对象”,也就是提供一个访问子系统的接口,除了这个接口不允许有任何访问子系统的行为发生。(即领导想了解项目完成的情况,只能通过项目经理,无需去询问底层的程序员、美工、产品经理之类的)。

    门面模式主要有两部分组成:

    * Facade门面角色

    客户端可以调用这个角色的方法。此角色知道所有子系统的所有功能和职责。一般情况下,本角色会将所有客户端发来的请求委派到对应的子系统去,也就是说该角色没有实际的业务逻辑,只是一个委托类。

    * subSystem子系统角色

    可以同时有一个或多个子系统。每一个子系统都不是一个单独的类,而是一个类的集合。子系统并不知道门面的存在。相对于子系统而言,门面角色知识另外一个客户端而已。

    【门面模式 例子】

    package com.Higgin.Facade;
    
    /**
     * 产品经理
     */
    class ProductManager{
        //设计产品
        public void designProduct(){
            System.out.println("产品经理:设计产品...");
        }
    }
    /**
     * 程序员
     */
    class Programmer{
        //写程序
        public void writeProgarmm(){
            System.out.println("程序员:写程序...");
        }
    }
    /**
     * 美工
     */
    class ArtDesigner{
        public void designArt(){
            System.out.println("美工:设计网页...");
        }
    }
    /**
     * 项目经理
     * 管理者 产品经理、程序员、美工
     */
    class ProjectManager{
        private ProductManager productManager=new ProductManager();
        private Programmer programmer=new Programmer();
        private ArtDesigner artDesigner=new ArtDesigner();
        //项目经理协调工作
        public void work(){
            productManager.designProduct();
            programmer.writeProgarmm();
            artDesigner.designArt();
        }
    }
    /**
     * 门面客户端
     */
    public class TestFacade {
        public static void main(String[] args) {
            ProjectManager projectManager=new ProjectManager();
            projectManager.work();
        }
    }

    【运行结果】

    【门面模式 优点】

    * 减少系统的相互依赖

    所有的依赖都是对门面对象的依赖,与子系统无关。

    * 提高了系统的灵活性

    依赖减少了,灵活性自然就提高了。不管子系统内部如何变化,只要不影响到门面对象,任你自由活动。

    * 提高安全性

    想让你访问子系统的哪些业务就开通哪些业务,不在门面上开通的方法则无法访问。

    【门面模式 缺点】

    不符合开闭原则,对修改关闭,对扩展开放。子系统有修改的情况,唯一能修改的就是门面角色的代码。

    【门面模式 使用场景】

    * 为一个复杂的模块或子系统提供一个共外界访问的接口。

    * 子系统相对独立,外界对子系统的访问只要黑箱操作即可。

    * 预防低水平人员带来的风险扩散

    【门面模式 注意事项】

    一般情况下,一个子系统主要有一个门面就够了。

    下面情况可能会有多个门面:

    * 门面已经庞大到不能忍受的地步

    如果一个纯洁的门面对象已经超过了200行代码,虽然都是简单的委托操作,也建议拆成多个门面,否则会带来维护和扩展的麻烦。如何拆分呢?按照功能拆分是非常好的原则:如一个操作数据库的门面类可以拆分成:查询门面类、删除门面类、更新门面类。

    * 子系统可以提供不同的访问路径

    ClassA、ClassB、ClassC是一个子系统中的3对独享,现在有两个不用的高层模块想要访问该子系统,模块一可以完整地访问所有业务逻辑,也就是代码中的Facade类,它是子系统的信任模块。二模块二可以是受限制访问对象,只能访问ClassB的methodB()方法。

  • 相关阅读:
    Python基础之迭代器、生成器
    Python基础之模块+异常
    Python基础之面向对象思维解决游戏《天龙八部》
    Oracle创建存储过程
    数据库范式
    Oracle条件判断
    Oracle的三种循环
    Oracle的pl/sql变量类型
    oracle如何实现去重和分页
    相关子查询和非相关子查询
  • 原文地址:https://www.cnblogs.com/HigginCui/p/6229390.html
Copyright © 2011-2022 走看看