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的方法本身不进行功能的处理,只是

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

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


              



         

  • 相关阅读:
    octotree神器 For Github and GitLab 火狐插件
    实用篇如何使用github(本地、远程)满足基本需求
    PPA(Personal Package Archives)简介、兴起、使用
    Sourse Insight使用过程中的常使用功能简介
    Sourse Insight使用教程及常见的问题解决办法
    github 遇到Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hosts问题解决
    二叉查找树的C语言实现(一)
    初识内核链表
    container_of 和 offsetof 宏详解
    用双向链表实现一个栈
  • 原文地址:https://www.cnblogs.com/krislight1105/p/3748301.html
Copyright © 2011-2022 走看看