zoukankan      html  css  js  c++  java
  • 设计模式学习--------4.外观模式学习

    场景:

             当客户端访问一个子系统中的多个子模块的方法时,既能简单的使用这些子系统内部的模块功能,而又不用客户端

    与子系统内部的多个模块交互.

            比如举办一个会议,需要首先预约时间,然后准备会议室,接着就是开会,最后是总结会议成果。如果没有助理,这些

    情我都要自己去一个一个亲自去准备,并且必须知道每一步的具体步骤,这样不但增加了我开会所用的时间也增加了

    次会议的复杂度。所以我希望有助理能帮我处理这个会议的步骤,然后助理指派手下的4个实习生去准备,实习生A

    来负责预约时间,实习生B负责准备会议室,实习生C负责召集开会人员,实习生D负责会议总结,这个助理就是这样一个外

    观接口,所有实习生都是负责开会这样一个系统需求的子模块,但有时候我想要进行电话会议,就不需要准备会议室的步

    骤,那我直接找A帮忙预约时间打电话就好,也就不需要助理当中间人了.


    定义:

            为子系统中的一组接口提供一个一致的界面,Facade(外观)模式定义了一个高层接口,这个接口使得这一子系统

    加容易使用。


    角色:

           Facade: 定义子系统的多个模块对外的高层接口,通常需要调用内部多个模块,从而把客户的请求代理给适当的子系

    统对象

    package com.kris.study;
    
    public class Facade {
        private Facade(){}
        public static void kaiHui(){
        	new FreshManA().time();
        	new FreshManB().getReady();
        	new FreshManC().start();
        	new FreshManD().summary();
        }
    }
    


           子系统模块:接受Facade对象的委派,真正实现功能,各个模块之间可能有交互。Facade知道各个模块,但是

    各个模块不一定知道Facade对象。比如实习生只知道助理叫什么,但是不知道她的名字和所负责的工作。

    package com.kris.study;
    
    public class FreshManA {
        public void time(){
        	System.out.println("预约时间");
        }
    }
    
    
    package com.kris.study;
    
    public class FreshManB {
           public void getReady(){
        	   System.out.println("准备会议室");
           }
    }
    
    
    
    package com.kris.study;
    
    public class FreshManC {
         public void start(){
        	 System.out.println("举行会议");
         }
    }
    
    
    package com.kris.study;
    
    public class FreshManD {
         public void summary(){
        	 System.out.println("总结");
         }
    }
    
    
    
    


            Client客户端:可以直接和Facade交互也可以单独调用子模块功能

    package com.kris.study;
    
    public class Client {
       public static void main(String[] args) {
    	   Facade.kaiHui();
    //	   new FreshManA().time();
       }
    }
    


    原理分析:

          外观模式的目的不是给子系统增加新的功能接口,而是为了让外部减少与子系统内部多个模块的直接交互,松散耦

    合,从而让外部能够简单的使用子系统,并且防止重复调用相同的代码.所以Facade的方法本身不进行功能的处理,只是

    实现一个功能的组合调用。

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


              



         

  • 相关阅读:
    至少有K个重复字符的最长字串 分治法+递归
    旋转数组
    旋转链表 指针移动
    通过删除字母匹配到字典里最长的单词
    How to fix yum after CentOS 6 went EOL
    Centos6 yum源配置(CentOS 6停止更新)
    ORACLE 12C R2 RAC 安装配置指南
    Background Processes Specific to Oracle RAC
    如何缩小 Oracle 数据库中的临时表空间
    Script To Get Tablespace Utilization In Oracle Database 12c
  • 原文地址:https://www.cnblogs.com/krislight1105/p/3748301.html
Copyright © 2011-2022 走看看