设计模式(13)-外观模式详解(易懂)

作者: 秦子帅 | 来源:发表于2018-03-22 09:38 被阅读149次

    外观模式的定义

    外观模式(Facade),也被称为“门面模式”,为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。

    模型:

    image
    • Facade:外观角色,了解子系统所有的方法和任务,此角色有自己的方法,client通过此角色方法来调用子系统的功能

    • Subsystem:子系统角色,可以是一个也可以是多个,子系统是分化的不同的处理模块,不是单独的类。

    代码演示:

    1.子系统:

    
    public class SubsystemA {
    
       public  void methodA(){
           Log.d("qzs","子系统A");
       }
    }
    
    public class SubsystemB {
       public  void  methodB(){
           Log.d("qzs","子系统B");
       }
    }
    
    

    强调一下:这两个类不是独立的,可以看成是一个集合。如果不明白的话,往下面去看实例说明,应该好懂一些。

    2.外观类:

    
    public class Facade  {
       private  SubsystemA subsystemA=new SubsystemA();
       private SubsystemB subsystemB=new SubsystemB();
       //提供给客户端调用的方法
       public  void  methodFacade(){
    
           subsystemA.methodA();
           subsystemB.methodB();
       }
    }
    
    

    对外提供的方法根据客户端的需求来决定。下面通过一个实例来了解一下。


    实例说明

    例如我们在今日头条或者微信公众号上发布文章,经常分为两步:

    • 编写文章内容并提交文章

    • 审核(审核通过才能发布成功)

    1.子系统

    
    public class Content {
       //编写的文章内容
       public  void  articleContent(String str){
           Log.d("qzs",str);
       }
       //发布文章
       public  void  release(){
           Log.d("qzs","点击提交-发布");
       }
    }
    
    public class Examine {
         //文章审核
       public  void  articleExamine(Content content){
           Log.d("qzs","此文章审核通过了");
       }
    }
    
    

    2.外观类

    
    public class Facade {
       private  Examine examine=new Examine();
       private  Content content=new Content();
    
      // 对外提供的处理方法
       public  void  Call(String str){
           content.articleContent(str);
           content.release();
           examine.articleExamine(content);
       }
    }
    
    

    3.调用:

    
           String str="编写的文章的内容";
           Facade facade=new Facade();
           facade.Call(str);
    
    

    运行:

    image

    强调:

    子系统每个类不是独立的,两个类分为不同的模块并形成一个集合;另外子系统每个类中的方法数可以是一个或者多个。


    实外观模式的优缺点及其他

    1.优点

    • 减少系统的相互依赖,客户端只能调用外观类的方法

    • 提高安全性

    • 子系统是隐藏的

    2.缺点

    不符合开闭原则!!,如果对开闭原则不熟悉的朋友可以看下面的文章:

    六大设计原则详解(6)-开闭原则

    3.适用场景

    在以下情况下可以考虑使用外观模式:

    • 设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。

    • 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。

    • 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。

    本文部分定义来源于网络


    另外可以加入我的Android技术交流群:458739310
    大家可以关注我的微信公众号:「安卓干货铺」一个有质量、有态度的公众号!

    相关文章

      网友评论

        本文标题:设计模式(13)-外观模式详解(易懂)

        本文链接:https://www.haomeiwen.com/subject/tmboqftx.html