博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之外观模式
阅读量:3963 次
发布时间:2019-05-24

本文共 1814 字,大约阅读时间需要 6 分钟。

外观模式(门面模式) Facade

Intro

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

Prototype

  • Facade: 外观类,知道哪些子系统类负责处理请求,将请求代理给对应的子系统对象
  • SubSystem Classes,实现子系统中的功能,处理 Facade 指派的任务,和 Facade 没有关联关系,没有继承,也不会引用 Facade
public class SubSystem1{    public void MethodA()    {        Console.WriteLine("MethodA in SubSystem1");    }    public void MethodB()    {        Console.WriteLine("MethodB in SubSystem1");    }}public class SubSystem2{    public void MethodA()    {        Console.WriteLine("MethodA in SubSystem2");    }    public void MethodB()    {        Console.WriteLine("MethodB in SubSystem2");    }}public class SubSystem3{    public void MethodA()    {        Console.WriteLine("MethodA in SubSystem3");    }    public void MethodB()    {        Console.WriteLine("MethodB in SubSystem3");    }}public class Facade{    private readonly SubSystem1 _subSystem1 = new SubSystem1();    private readonly SubSystem2 _subSystem2 = new SubSystem2();    private readonly SubSystem3 _subSystem3 = new SubSystem3();    public void MethodA()    {        _subSystem1.MethodA();        _subSystem2.MethodA();        _subSystem3.MethodA();        Console.WriteLine();    }    public void MethodB()    {        _subSystem1.MethodB();        _subSystem2.MethodB();        _subSystem3.MethodB();        Console.WriteLine();    }}var facade = new Facade();facade.MethodA();facade.MethodB();

应用场景

  • 解决易用性问题,可以用来封装系统的底层实现,隐藏系统的复杂性,提供一组更加简单易用、更高层的接口。
  • 解决性能问题,通过将多个接口调用替换为一个门面接口调用,减少网络通信成本,提高 App 客户端的响应速度。API 聚合就是属于这种,也是属于外观模式的应用
  • 解决事务问题,通过门面模式可以方便的使得原本多个操作可以在一个事务内完成,如果中间某一个环节操作失败,可以回滚事务,撤销变更

More

接口设计的好坏,直接影响到类、模块、系统是否好用。所以,我们要多花点心思在接口设计上。

完成接口设计,就相当于完成了一半的开发任务。只要接口设计得好,那代码就差不到哪里去。接口粒度设计得太大,太小都不好。太大会导致接口不可复用,太小会导致接口不易用。

在实际的开发中,接口的可复用性和易用性需要“微妙”的权衡。针对这个问题,我的一个基本的处理原则是,尽量保持接口的可复用性,但针对特殊情况,允许提供冗余的门面接口,来提供更易用的接口。

Reference

转载地址:http://sduki.baihongyu.com/

你可能感兴趣的文章
去除首尾空白字符
查看>>
去掉文件名中的路径
查看>>
Spring Batch Step 流程
查看>>
动态代理
查看>>
如何写出高效的正则表达式
查看>>
多个 ZooKeeper 服务器的例子
查看>>
正则表达式
查看>>
Java I/O
查看>>
序列化
查看>>
Perl 精萃
查看>>
Perl 简介
查看>>
Perl 注释
查看>>
数据类型之标量
查看>>
调试 Perl 脚本
查看>>
增强的for循环语句
查看>>
方法的可变参数
查看>>
静态导入
查看>>
java 泛型
查看>>
控制结构
查看>>
标准输入输出
查看>>