当前位置: 首页 > news >正文

在线考试系统网站建设可以做软件的软件

在线考试系统网站建设,可以做软件的软件,石家庄官网,学做网站最好的网站一、外观模式介绍 外观模式( Facade Pattern),也叫门面模式,是一个 “结构型” 设计模式。 外观模式的原始定义是:为子系统中的一组接口提供统一的接口。它定义了一个更高级别 的接口,使子系统更易于使用。 外观模式,是…

一、外观模式介绍

       外观模式( Facade Pattern),也叫门面模式,是一个 “结构型” 设计模式。

       外观模式的原始定义是:为子系统中的一组接口提供统一的接口。它定义了一个更高级别

       的接口,使子系统更易于使用。

       外观模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容

       易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体

       的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。

       外观模式有点类似之前讲到的迪米特法则(最少知识原则)和接口隔离原则:两个有交互

       的系统,只暴露有限的必要的接口,如下图所示:

               

       如上图所示,外观类Facade充当了系统中的"服务员",它为多个业务类的调用提供了一个

       统一的入口,简化了类与类之间的交互,如果没有门面类,每个客户类需要和多个子系统之间

       进行复杂的交互,系统的耦合度将会很大

二、外观模式原理

       外观(Facade)模式包含以下主要角色:

                1)外观(Facade)角色:为多个子系统对外提供一个共同的接口。

                     外观角色中可以知道多个相关的子系统中的功能和责任。在正常情况下,它将所

                     有从客户端发来的请求委派到相应的子系统,传递给相应的子系统对象处理

                2)子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访

                      问它。

                      每一个子系统可以是一个类也可以是多个类的集合;每一个子系统都可以被客户

                      端直接调用,或者被外观角色调用;子系统并不知道外观的存在,对于子系统而言,

                      外观角色仅仅是另一个客户端而已

       外观模式类图如下:

                

       外观模式用代码描述如下:

               即外观模式基础代码   

/******************************************************** 子系统A* *******************************************************/
public class SubSystemA {public void methodA(){//业务代码}
}/******************************************************** 子系统B********************************************************/
public class SubSystemB {public void methodB(){//业务代码}
}/******************************************************** 子系统C* *******************************************************/
public class SubSystemC {public void methodC(){//业务代码}
}/******************************************************** 外观角色* 在外观类中操作各个子系统,而Client客户端只操作外观类Facade* *******************************************************/
public class Facade {private SubSystemA sa = new SubSystemA();private SubSystemB sb = new SubSystemB();private SubSystemC sc = new SubSystemC();public void method(){sa.methodA();sb.methodB();sc.methodC();}
}/******************************************************** 测试* 测试作为客户端,只操作外观类* *******************************************************/
public class Test {public static void main(String[] args) {Facade facade = new Facade();facade.method();}
}

三、外观模式应用示例

       以智能家居为例来学习下 外观模式的使用;

       具体需求是:

               通过智能音箱来控制室内的 灯、电视、空调;本来每个设备都需要进行独立的开关操

               作,现在通过智能音箱完成对这几个设备的统一控制 

       类图如下:

               

       具体代码如下:

/********************************************************* 以智能家居为例来学习下 外观模式的使用;*具体需求是:*    通过智能音箱来控制室内的 灯、电视、空调;本来每个设备都需要进行独立的开关操*    作,现在通过智能音箱完成对这几个设备的统一控制 ** 灯类--子系统* *******************************************************/
public class Light {public void on(){System.out.println("打开灯......");}public void off(){System.out.println("关闭灯......");}
}/******************************************************** 电视类--子系统********************************************************/
public class TV {public void on(){System.out.println("打开电视......");}public void off(){System.out.println("关闭电视......");}
}/******************************************************** 空调类--子系统* *******************************************************/
public class AirCondition {public void on(){System.out.println("打开空调......");}public void off(){System.out.println("关闭空调......");}}/******************************************************** 音响类--外观角色* *******************************************************/
public class SmartAppliancesFacade {private Light light;private TV tv;private AirCondition airCondition;public SmartAppliancesFacade() {this.light =new Light();this.tv = new TV();this.airCondition = new AirCondition();}public void say(String message){if(message.contains("打开")){on();}else if(message.contains("关闭")){off();}else{System.out.println("对不起没有听清楚您说什么! 请重新再说一遍");}}//起床后 语音开启 电灯 电视 空调private void on() {System.out.println("起床了!");light.on();tv.on();airCondition.on();}//睡觉前 语音关闭 电灯 电视 空调private void off() {System.out.println("睡觉了!");light.off();tv.off();airCondition.off();}}/******************************************************** 客户端测试类********************************************************/
public class Client {public static void main(String[] args) {//创建外观对象SmartAppliancesFacade facade = new SmartAppliancesFacade();facade.say("打开家电");facade.say("关闭家电");}
}

四、外观模式总结

1、外观模式优点

      1)它对客户端屏蔽了子系统组件,减少了客户端所需要处理的对象数目,并使子系统使

           用起来更加的容易;通过引入外观模式,客户端代码将变得很简单,与之关联的对象也很少

      2)它实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的

           客户端,只需要调整外观类即可

      3)一个子系统的修改对其他子系统没有任何影响,而子系统内部变化也不会影响到外观对象

2、外观模式缺点

      1)不能很好的控制客户端直接使用子系统类,如果客户端访问子系统类做太多的限制则减少

            了可变性和灵活性

      2)如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了开闭原则

3、外观模式适用场景

      1)简化复杂系统。

            比如,当我们开发了一整套的电商系统后(包括订单、商品、支付、会员等系统),

            我们不能让用户依次使用这些系统后才能完成商品的购买,而是需要一个门户网站

            或手机 App 这样简化过的门面系统来提供在线的购物功能

      2)减少客户端处理的系统数量。

            比如,在 Web 应用中,系统与系统之间的调用可能需要处理 Database 数据库、Model

            业务对象等,其中使用 Database 对象就需要处理打开数据库、关闭连接等操作,然后转

            换为 Model 业务对象,实在是太麻烦了。如果能够创建一个数据库使用的门面(其实就是

            常说的 DAO 层),那么实现以上过程将变得容易很多。

      3)让一个系统(或对象)为多个系统(或对象)工作。

            比如,线程池 ThreadPool 就是一个门面模式,它为系统提供了统一的线程对象的创建、

            销毁、使用等。

      4)联合更多的系统来扩展原有系统。

            当我们的电商系统中需要一些新功能时,比如,人脸识别,我们可以不需要自行研发,

            而是购买别家公司的系统来提供服务,这时通过门面系统就能方便快速地进行扩展。

      5)作为一个简洁的中间层。

            门面模式还可以用来隐藏或者封装系统中的分层结构,同时作为一个简化的中间层来使

            用。比如,在秒杀、库存、钱包等场景中,我们需要共享有状态的数据时(如商品库存、

            账户里的钱),在不改变原有系统的前提下,通过一个中间的共享层(如将秒杀活动的

            商品库存总数统一放在 Redis 里),就能统一进行各种服务(如,秒杀详情页、商品详

           情页、购物车等)的调用。

http://www.yayakq.cn/news/234485/

相关文章:

  • 低价网站建设推广报价深圳网站制作公司售后服务
  • 网站建设模拟实训题做网站要学会什么软件
  • 怎样做网站排名优化网站建设预期目标
  • ps做的图怎么做成网站前端网站备案和前置审批
  • 企业网站优化哪家好遵义网上办事大厅
  • 中英双语 网站 模板网站建设 风险防控
  • 生鲜网站建设规划书样板专门学设计的网站
  • 七牛怎么做网站服务器东莞公司的网页怎么做的
  • 提高分辨率网站宁波专业定制网站建设
  • 学网站建设工作室一个网站怎么做聚合
  • 个人网站和企业网站区别网站的基础知识
  • 网站用什么颜色巩义推广网站哪家好
  • 做的最好的门户网站wordpress 学校模板
  • 莆田外贸建站淘宝推广方法有哪些
  • 济南网站建设seo优化深圳工程交易中心官网
  • 给公司做网站需要什么外贸seo
  • 旅游网站制作内容零基础学习做网站
  • 做化妆品代理在那些网站比较多服装电子商务网站建设
  • 网站建设怎么样工作室京津冀网站建设公司
  • 如何做网站不容易被攻击国际知名设计公司名称
  • 怎么看网站什么时候做的优化公司排行榜
  • 2017做网站赚钱网站正在建设维护中
  • 网站建设丨金手指谷哥14宜昌网站制作公司排名
  • 瀑布流资源网站模板三合一企业网站模板
  • 如何免费建购物网站wordpress.org密码
  • 洪山网站建设公司网站上的广告怎么做
  • 抖音网红代运营网站诊断网站seo诊断
  • 学校网站建设自检自查报告移动端优化
  • 做个平台网站怎么做的源代码
  • 信用 网站 建设方案登陆工伤保险网站 提示未授权 怎么做