设计模式之结构型模式:外观(Facade)

意图

  • 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

适用性

  • 当你想要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具有可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层;
  • 客户程序与抽象类的实现部分之间存在着很大的依赖性。引入facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
  • 构建一个层次结果的子系统,使用facade模式定义子系统中每层的入口点。如果子系统之间时相互依赖的,你可以让他们仅通过facade进行通讯,从而简化了它们之间的依赖关系;

结构

参与者

  • Facde
  1. 知道哪些子系统类负责处理请求
  2. 将客户的请求代理给适当的子系统对象
  • Subsystem classes
  1. 实现子系统的功能
  2. 处理由Facade对象指派的任务
  3. 没有facade的任何相关信息

协作

  • 客户程序通过发送请求给Facade的方式与子系统通讯,Facade将这些消息转发给适当的子系统对象。尽管是子系统中有关对象在做实际工作,但facade模式本身也必须将它的接口转换成子系统的接口;
  • 使用facade的客户程序不需要直接访问子系统的对象

效果

  1. 它对客户屏蔽子系统组件,因此而减少了客户处理的对象的数目并使得子系统使用起来更加方便。
  2. 它实现了子系统与客户之间的送耦合关系,而子系统内部的功能组件往往是紧耦合的。
  3. 如果应用需要,并不限制它们使用子系统类,因此可以在系统易用性和通用性做选择;

实现

  1. 降低客户与子系统之间的耦合度
  2. 公共子类与私有子类

代码示例

class FacadeStructure
    {
        public void Test()
        {
            Facade facade = new Facade();
            facade.OperationAB();
            facade.OperationCD();
        }

    }

    class SubsystemA
    {
        public void Operation()
        {
            Console.WriteLine(this.GetType().Name+"---Operation");
        }
    }

    class SubsystemB
    {
        public void Operation()
        {
            Console.WriteLine(this.GetType().Name + "---Operation");
        }
    }
    class SubsystemC
    {
        public void Operation()
        {
            Console.WriteLine(this.GetType().Name + "---Operation");
        }
    }
    class SubsystemD
    {
        public void Operation()
        {
            Console.WriteLine(this.GetType().Name + "---Operation");
        }
    }

    class Facade
    {
        private SubsystemA _a;
        private SubsystemB _b;
        private SubsystemC _c;
        private SubsystemD _d;

        public Facade()
        {
            _a = new SubsystemA();
            _b = new SubsystemB();
            _c = new SubsystemC();
            _d = new SubsystemD();
        }

        public void OperationAB()
        {
            _a.Operation();
            _b.Operation();
        }

        public void OperationCD()
        {
            _c.Operation();
            _d.Operation();
        }
    }

相关模式

     Abstract Factory模式可以与Facade模式一起使用以提供一个接口,这一接口可用来以一种子系统独立的方式创建子系统对象。Abstract Factory也可以代替Facade模式隐藏那些与平台相关的类;

      Mediator模式与facade模式的相似之处是它抽象了一些已有的类的功能。然而,Mediator的目的是对同事之间的任意通讯进行抽象,通常集中不属于任何单个对象的功能。Mediator的同事对象知道中介者并于它通信,而不是直接与其他同类对象。相对而言,Facade不仅对子系统对象的接口进行抽象,从而使它们更容易使用;它并不定义新功能,子系统也不知道facade的存在。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值