精华内容
下载资源
问答
  • 最近天气突然间一下子就变冷了,记得前两天温度还是25、26度。 天气冷了,就不想动,不想离开暖和的被窝。 要睡觉前的时候,女朋友总是说你去拉上窗帘、关掉电视、关掉灯。 ...早上醒来的时候,女朋友总是...一、...

    最近天气突然间一下子就变冷了,记得前两天温度还是25、26度。

    天气冷了,就不想动,不想离开暖和的被窝。

    要睡觉前的时候,女朋友总是说你去拉上窗帘、关掉电视、关掉灯。

    早上醒来的时候,女朋友总是说你去打开灯、打开电视、拉开窗帘。

           宝宝也怕冷呢,大早上/大晚上的也不想动呢,但是我也不能让我的女朋友去做这个事情,谁让她是我的宝贝呢。

           但是这难不倒拥有聪明才智的我,搞个一键开关不就完事了吗。

           好像是很有道理,想法来了,说干就干…

     

    一、外观模式基本概念

    1.1 定义

           外观模式又叫做门面模式(Façade Pattern),提供了一个统一的接口,用来访问子系统中的功能。外观模式定义了一个高层接口,让子系统更容易使用。

           外观模式通过创建一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以通过调用外观类的方法来调用内部子系统中所有方法。

    如下图:

           外观模式的本质是:封装交互,简化调用

     

    1.2 网站导航小栗子理解外观模式

           给个网站的导航例子你就懂了:以前需要在搜索栏逐个搜索网站地址;有了网站导航(用了外观模式)后,就方便很多了:

     

    1.3 主要作用

    (1)实现客户类与子系统类的松耦合

    (2)降低原有系统的复杂度

    (3)提高了客户端使用的便捷性,使得客户端无须关心子系统的工作细节,通过外观角色即可调用相关功能。

    - 引入外观角色之后,用户只需要与外观角色交互;

    - 用户与子系统之间的复杂逻辑关系由外观角色来实现

     

    1.4 解决的问题

    (1)避免了系统与系统之间的高耦合度

    (2)使得复杂的子系统用法变得简单

     

     

    1.5 类图

     

     

    1.6 主要角色

           在这个设计模式中,主要设计到3个角色:

    (1)门面角色(Facade):外观模式的核心。它被客户角色调用,它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。

    (2)子系统角色(SubSystem):实现了子系统的功能。它对客户角色和Facade时未知的。它内部可以有系统内的相互交互,也可以由供外界调用的接口。

    (3)客户角色(Client):通过调用Facede来完成要实现的功能。

     

     

    展开全文
  • I . 外观模式概念 II . 外观模式 适用场景 III . 外观模式 优缺点 IV . 外观模式与其它设计模式的联系与区别 V . 外观模式 代码示例



    I . 外观模式概念



    1 . 外观模式概念 :


    ① 设计模式类型 : 结构型 ;

    ② 标准定义 : 提供一个统一接口 , 用于访问子系统中的一群接口 ;

    ③ 隐藏复杂性目的 : 定义高层级接口 , 让子系统更容易使用 , 目的是隐藏系统的复杂性 ;

    ④ 交互流程 : 多个子系统联合完成一个操作 , 提供一个统一的接口 , 供客户端调用 , 客户端不与每个子系统进行复杂的交互 , 客户端只与提供接口的外观类进行交互 ;


    2 . 外观模式的相关角色 :


    ① 外观角色 : 外观类有自己的方法 , 用户可以通过调用外观类的方法 , 调用子系统提供的功能 ;

    ② 子系统角色 : 可以是若干个处理模块 , 数量 1 个或多个 ;

    ③ 用户角色 : 用户通过外观类调用子系统的功能 ;



    II . 外观模式 适用场景



    外观模式适用场景 :

    ① 子系统复杂 : 子系统复杂 , 通过使用外观模式可以简化调用接口 ;

    ② 层次复杂 : 系统结构层次复杂 , 每个层级都一个使用外观对象作为该层入口 , 可以简化层次间的调用接口 ;



    III . 外观模式 优缺点



    1 . 外观模式优点 :


    ① 简化调用 : 简化复杂系统的调用过程 , 无需对子系统进行深入了解 , 即可完成调用 ;

    ② 降低耦合 : 使用外观模式 , 只与外观对象进行交互 , 不与复杂的子系统直接进行交互 , 降低了系统间的依赖 , 使耦合关系更低 ; 子系统内部的模块更容易扩展和维护 ;

    ③ 层次控制 : 层次结构复杂的系统 , 有些方法需要提供给系统外部调用 , 有些方法需要在内部使用 , 将提供给外部的功能定义在外观类中 , 这样既方便调用 , 也能将系统内部的细节隐藏起来 ;

    ④ 符合迪米特法则 : 最少知道原则 , 用户不需要了解子系统内部的情况 , 也不需要与子系统进行交互 , 只与外观类进行交互 ; 降低了应用层与子系统之间的耦合度 ;


    2 . 外观模式缺点 :


    ① 子系统扩展风险 : 系统内部扩展子系统时 , 容易产生风险 ;

    ② 不符合开闭原则 : 外观模式 , 扩展子系统时 , 不符合开闭原则 ;



    IV . 外观模式与其它设计模式的联系与区别



    1 . 外观模式与中介者模式 :


    ① 外观模式 : 外观模式关注外部用户与子系统之间的交互 ;

    ② 中介者模式 : 中介者模式关注子系统内部之间的交互 ;


    2 . 外观模式与单例模式 : 外观类一般会被定义成单例类 ;


    3 . 外观模式 与 抽象工厂模式 : 外观类中 , 使用抽象工厂模式 , 获取子系统的实例对象 , 子系统内部可以屏蔽外观类 ;



    V . 外观模式 代码示例



    1 . 需求描述 : 实现一个购买商品的功能 , 用户提出购买某件商品 , 首先要查看库存 , 然后付款 , 最后物流发货 ;


    ① 用户与子系统直接交互 : 首先要与仓储子系统交互检查是否有库存 , 然后与支付子系统交互支付货款 , 最后进入物流子系统获取物流编号 ; 使用这种交互方式 , 导致用户与子系统耦合度太高 ;

    ② 引入外观类 : 将与仓储子系统 , 支付子系统 , 物流子系统之间的交互统一交给外观类进行处理 , 用户只需要与外观类对象进行交互 , 这样大大减少了用户与多个子系统之间的耦合度 ;


    2 . 多个子系统代码示例 : 三个子系统分别处理各自业务 ;


    ① 仓储子系统代码 :

    package kim.hsl.design.facade;
    
    /**
     * 仓库子系统
     * 查询是否有库存
     */
    public class StoreService {
        public boolean isStokeAvailable(Goods goods){
            System.out.println("校验是否有库存 : " + goods.toString() + " 有库存");
            return true;
        }
    }
    

    ② 支付子系统代码 :

    package kim.hsl.design.facade;
    
    /**
     * 支付子系统
     * 支付成功返回 true
     */
    public class PaymentService {
        public boolean pay(Goods goods){
            System.out.println("使用银联支付");
            return true;
        }
    }
    

    ③ 物流子系统代码 :

    package kim.hsl.design.facade;
    
    /**
     * 物流子系统
     * 进入发货流程 , 返回物流编号
     */
    public class LogisticsService {
        public String logistics(Goods goods){
            String logisticsNo = "31415926";
            System.out.println(goods + " 进入物流系统 , 运单号为 " + logisticsNo);
            return logisticsNo;
        }
    }
    

    3 . 外观类代码 : 外观类中维护三个子系统模块 , 用户通过 buyGoods 方法 , 作为与三个子系统之间的交互接口 ;

    package kim.hsl.design.facade;
    
    /**
     * 用户购买的统一接口
     * 用户只需要与该类进行交互
     * 该类统一处理 仓储 支付 物流 等购买流程
     */
    public class BuyFacade {
        private LogisticsService logisticsService;
        private PaymentService paymentService;
        private StoreService storeService;
    
        public BuyFacade() {
            storeService = new StoreService();
            paymentService = new PaymentService();
            logisticsService = new LogisticsService();
        }
    
        /**
         * 外观类提供的访问内部三个子系统的接口
         * 客户端只需要调用该方法 , 即可完整商品购买流程
         * @param goods
         */
        public void buyGoods(Goods goods){
            if(storeService.isStokeAvailable(goods)){
                if(paymentService.pay(goods)){
                    logisticsService.logistics(goods);
                }
            }
        }
    }
    

    4 . 商品类代码 :

    package kim.hsl.design.facade;
    
    /**
     * 商品
     */
    public class Goods {
        private String name;
        public Goods(String name) {
            this.name = name;
        }
        @Override
        public String toString() {
            return "Goods{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }
    

    5 . 测试函数入口代码 :

    package kim.hsl.design.facade;
    
    public class Main {
        public static void main(String[] args) {
            Goods goods = new Goods("肥皂");
            BuyFacade buyFacade = new BuyFacade();
            buyFacade.buyGoods(goods);
        }
    }
    

    6 . 最终执行结果 :

    校验是否有库存 : Goods{name='肥皂'} 有库存
    使用银联支付
    Goods{name='肥皂'} 进入物流系统 , 运单号为 31415926
    
    展开全文
  • SQL数据库中内模式、外模式概念模式的区别和概念 外模式 外模式又称子模式或用户模式,对应于用户级。它是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示。外模式是从模式导出的一...

    SQL数据库中内模式、外模式与概念模式的区别和概念

    外模式

    外模式又称子模式或用户模式,对应于用户级。它是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示。外模式是从模式导出的一个子集,包含模式中允许特定用户使用的那部分数据。用户可以通过外模式描述语言来描述、定义对应于用户的数据记录(外模式),也可以利用数据操纵语言(Data
    Manipulation Language,DML)对这些数据记录进行操作。外模式反映了数据库系统的用户观。

    概念模式

    概念模式又称模式或逻辑模式,对应于概念级。它是由数据库设计者综合所有用户的数据,按照统一的观点构造的全局逻辑结构,是对数据库中全部数据的逻辑结构和特征的总体描述,是所有用户的公共数据视图(全局视图)。它是由数据库管理系统提供的数据模式描述语言(Data
    Description Language,DDL)来描述、定义的。概念模式反映了数据库系统的整体观。

    内模式

    内模式又称存储模式,对应于物理级。它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构,对应着实际存储在外存储介质上的数据库。内模式由内模式描述语言来描述、定义的。内模式反映了数据库系统的存储观。
    在一个数据库系统中,只有唯一的数据库, 因而作为定义
    、描述数据库存储结构的内模式和定义、描述数据库逻辑结构的模式,也是唯一的,但建立在数据库系统之上的应用则是非常广泛、多样的,所以对应的外模式不是唯一的,也不可能是唯一的。

    展开全文
  • 浅谈数据库三大模式:外模式概念模式和内模式

    万次阅读 多人点赞 2019-09-17 09:45:56
    对应数据库的升级、外模式包括(子模式 用户模式) 用来描述用户看到或者使用那部分的数据的逻辑结构,用户根据外模式用户数据操作语句或者程序去操作数据库中的数据,外模式的主要特点用来描述组成用户视图各个记录...

    在这里插入图片描述
    人们为数据库设计了一个严谨的体系结构,数据库领域公认的标准结构是三级模式结构,它包括外模式、概念模式、内模式,有效地组织、管理数据,提高了数据库的逻辑独立性和物理独立性。用户级对应外模式,概念级对应概念模式,物理级对应内模式,使不同级别的用户对数据库形成不同的视图。所谓视图,就是指观察、认识和理解数据的范围、角度和方法,是数据库在用户“眼中"的反映,很显然,不同层次(级别)用户所“看到”的数据库是不相同的。

    外模式
    外模式又称子模式或用户模式,对应于用户级。它是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示。外模式是从模式导出的一个子集,包含模式中允许特定用户使用的那部分数据。用户可以通过外模式描述语言来描述、定义对应于用户的数据记录(外模式),也可以利用数据操纵语言(Data Manipulation Language,DML)对这些数据记录进行操作。外模式反映了数据库系统的用户观。

    概念模式
    概念模式又称模式或逻辑模式,对应于概念级。它是由数据库设计者综合所有用户的数据,按照统一的观点构造的全局逻辑结构,是对数据库中全部数据的逻辑结构和特征的总体描述,是所有用户的公共数据视图(全局视图)。它是由数据库管理系统提供的数据模式描述语言(Data Description Language,DDL)来描述、定义的。概念模式反映了数据库系统的整体观。

    内模式
    内模式又称存储模式,对应于物理级。它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构,对应着实际存储在外存储介质上的数据库。内模式由内模式描述语言来描述、定义的。内模式反映了数据库系统的存储观。
    在一个数据库系统中,只有唯一的数据库, 因而作为定义 、描述数据库存储结构的内模式和定义、描述数据库逻辑结构的模式,也是唯一的,但建立在数据库系统之上的应用则是非常广泛、多样的,所以对应的外模式不是唯一的,也不可能是唯一的。

    展开全文
  • 三级模式:外模式概念模式、内模式。一个数据库中外模式可以有多个,内模式和概念模式只能各有1个。 在数据库的三级模式结构中,内模式有( )
  • 外模式(external schema) 用户与数据库系统之间的接口,... 数据定义语言DDL 概念模式/内模式映象 内模式中描述 提供物理数据独立性 外模式/概念模式影象 在外模式中描述 提供逻辑数据独立性 概念模式像一个枢纽
  • Java设计模式概念

    千次阅读 2014-06-24 16:49:59
    设计模式(Design Patterns)  ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被...
  • 数据库系统的三级模式为概念模式、外模式和内模式 1)概念模式 概念模式(模式、逻辑模式)用以描述整个数据库中数据库的逻辑结构,描述现实世界中的实 体及其性质与联系,定义记录、数据项、数据的完整性约束条件...
  • 三级模式指的是外模式、模式和内模式。 两级映射指的是外模式-模式映射 和 模式-内模式映射。 文章目录一、模式(Schema)二、外模式(External Schema)三、内模式(Internal Schema)工作原理 一、模式(Schema...
  • JAVA外观模式

    千次阅读 2018-09-05 21:10:24
    2、外观模式概念 3、外观模式的UML 4、外观模式的实现 5、外观模式的优缺点及使用场景 6、总结 1、前言 外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间...
  • C++设计模式-外观模式

    千次阅读 多人点赞 2019-06-19 10:07:56
    外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 增加外观Facade可以提供一个简单的接口,减少它们之间的依赖; 为新系统开发一个...
  • 设计模式概念

    千次阅读 2016-11-03 19:05:41
    设计模式概念设计模式是什么它是一套理论,由软件界的先辈们GOF总结出的一套可以反复使用的经验,它可以提高代码的可重用性,增强系统的可维护性,以及解决一系列的复杂问题。做软件的人都知道需求是最难把握的,...
  • 设计模式概念和分类

    千次阅读 2017-05-12 08:51:36
    设计模式(Design Patterns) ——可复用面向对象软件的基础设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人...
  • 外观模式(门面模式

    千次阅读 2019-05-20 16:30:33
    一、概念介绍  外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更...
  • 外观模式是使用频率最高的结构型设计模式之一,无论是在Web应用软件或是桌面应用软件,还是在移动应用软件中,外观模式都得到了广泛的应用。 外观模式要求外部与一个子系统的通信可以通过一个统一的外观对象进行,...
  • 外观模式通过引入一个新的外观类(Facade)来实现该功能,外观类为多个业务类的调用提供统一入口,简化了类与类之间的交互。如果没有外观类,那么每个客户类需要和多个业务类之间进行复杂的交互,系统的耦合度将很大。...
  • 为了解决“一键开关”的问题,我加入了总开关的概念(也就是门面)了,只要和总开关交互,就能一键对电视、窗帘和灯进行操作了。先展示一下我帅气的类图: 二、外观模式之一键开关编码 2.1 子系统角色...
  • 1、外模式   外模式又称子模式,对应于用户级。它是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示。外模式是从模式导出的一个子集,包含模式中允许特定用户使用的那部分...
  • 创建型模式 5种1.单例模式(Singleton)单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。eg.数据库。连接数据库很耗时,...
  • sql 模式,外模式,内模式 二级映像

    千次阅读 2012-12-10 17:50:20
    早上备课的时候,发现教材第二章的2.2节数据库设计概述中有些概念性的错误,从而使我想到,对于外模式、模式、内模式的概念学生也不一定能理解透彻,于是想通过博客再谈仔细。  首先,谈谈模式的概念,模式为某种...
  • 作者 Joseph Zimmerman ...本文是介绍 JavaScript 采用的常见... 设计模式是一些可靠的编程方式,有助于保证您的代码更加易于维护、扩展及分离,所有设计模式在创建大型 JavaScript 应用程序(特别是在大群体
  • 本文介绍7种结构型模式里的剩下两种:享元模式、代理模式。一、享元模式FlyWeight 享元模式比较简单且重要,在很多场合都被用到,只不过封装起来了用户看不到。其概念:运用共享内存技术最大限度的支持大量细粒度的...
  • 数据库系统结构(1)两种角度(2)数据库系统模式的概念(3)数据库系统的三级模式结构① 模式(Schema)② 外模式(External Schema)③ 内模式(Internal Schema)④ 数据库模式、外模式、内模式总结(4)数据库的...
  • 1、什么是设计模式设计模式从本质上讲,是针对过去某种经验的总结。每种设计模式都是为了在特定条件下去解决某种问题。设计模式中的每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心...
  • 23种设计模式-门面模式(外观模式)

    万次阅读 多人点赞 2018-06-07 08:32:25
    2.概念 3.目的 4.解决方案 5. 类图 6.优缺点 优点: 缺点: 7.应用场景 8.代理种类 9.现实案例 10. 注意事项 1.产生背景 为什么需要门面模式 我是一个辛苦一辈子的农民,攒了几十年钱,现在日子...
  • Laravel 控制反转和门面模式概念详解

    千次阅读 2016-05-30 10:36:56
    这两个概念对于 Laravel 的使用者来说应该并不陌生,尤其是当你希望扩展或者替换 Laravel 核心库的时候,理解和合理使用它们可以极大提升 Laravel 的战斗力。这里以创建一个自己的 ServiceProvider 为例理解 ...
  • 学习说明:本篇的知识,只需要有一个大概的了解即可,在后面的章节中每个设计模式都会有详细的介绍。...GoF 中提供了单例模式、工厂方法模式、抽象工厂模式、原型模式、建造者模式 5 种创建型模式。 .
  • 装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。 用代理模式,代理类可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象...
  • 一、备忘录方法模式(Memento)基本概念 1.1 定义 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可将该对象恢复到原先保存的状态。 备忘录模式属于行为模式,该模式...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 304,080
精华内容 121,632
关键字:

外模式的概念