定义

外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接通过外观类来调用内部子系统中方法,从而外观模式让客户和子系统之间避免了紧耦合。

外观模式代码:

 /// <summary>
/// 子系统A
/// </summary>
public class ClassA
{
public void doSomethingA()
{
//业务逻辑
}
}
/// <summary>
/// 子系统B
/// </summary>
public class ClassB
{
public void doSomethingB()
{
//业务逻辑
}
}
/// <summary>
/// 子系统C
/// </summary>
public class ClassC
{
public void doSomethingC()
{
//业务逻辑
}
}
/// <summary>
/// 门面对象
/// </summary>
public class Facade
{
private ClassA a = new ClassA();
private ClassB b = new ClassB();
private ClassC c = new ClassC();
//提供给外部访问的方法
public void mothodA()
{
this.a.doSomethingA();
}
public void mothodB()
{
this.b.doSomethingB();
}
public void mothodC()
{
this.c.doSomethingC();
}
}

外观的优缺点

优点:

  1. 外观模式对客户屏蔽了子系统组件,从而简化了接口,减少了客户处理的对象数目并使子系统的使用更加简单。
  2. 外观模式实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件是紧耦合的。松耦合使得子系统的组件变化不会影响到它的客户。

缺点:

  1. 如果增加新的子系统可能需要修改外观类或客户端的源代码,这样就违背了”开——闭原则“(不过这点也是不可避免)。

使用场景

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

  • 外一个复杂的子系统提供一个简单的接口
  • 提供子系统的独立性
  • 在层次化结构中,可以使用外观模式定义系统中每一层的入口。其中三层架构就是这样的一个例子

最新文章

  1. 解决安卓微信浏览器中location.reload 或者 location.href失效的问题
  2. JavaScript基本语法(二)
  3. 关于MYSQL四种引擎
  4. 操作系统开发系列—12.a.从Loader到内核 ●
  5. 理解flex_对齐
  6. WPF之TextBox
  7. Apache Storm技术实战之1 -- WordCountTopology
  8. 利用Java Service Wrapper将java项目添加到windows服务中
  9. ubuntu 折腾之路
  10. arcgis切图问题
  11. 聊一聊JQ中delegate事件委托的好处
  12. TsBatis 预览
  13. [Hive安装问题]
  14. (转)es6中object.create()和object.assign()
  15. 轻量架构ShuffleNet V2:从理论复杂度到实用设计准则
  16. 特别翔实的adaboost分类算法讲解 转的
  17. redis集群与分片(2)-Redis Cluster集群的搭建与实践
  18. Jenkins忘记用户名密码
  19. 设计模式之——外观or门面模式
  20. VUE 采坑之旅-- Mint-ui 按需引入报出Module build failed: Error: Couldn&#39;t find preset &quot;es2015&quot; relative to directory &quot;C:\\phpStudy\\PHPTutorial\\WWW\\text\\vuep\\vue-demo&quot;

热门文章

  1. 数据库(mysql)相关知识
  2. vmWare pro 14.1.1+ubuntu-desktop-amd64的总体安装流程
  3. Java中线程同步锁和互斥锁有啥区别?看完你还是一脸懵逼?
  4. wordpress背景添加跟随鼠标动态线条特效
  5. 多条SQL语句对查询结果集的垂直合并,以及表设计时如何冗余字段
  6. 小程序开发基础-swiper 滑块视图容器
  7. 《http权威指南》读书笔记9
  8. 深入Vue2.x的虚拟DOM diff原理
  9. NuGet 构建服务器与常用命令
  10. Intellij idea常用快捷键和技巧