设计模式之外观模式原理及实例(简单讲解)

外观模式

在外观模式中,一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户端与子系统内部复杂性分隔开,使得客户端只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道。

外观模式结构:

1.Facade(外观角色):在客户端可以调用它的方法,在外观角色中可以知道相关的(一个或者多个)子系统的功能和责任。在正常情况下,它将调用从客户端发来的请求委派到相应的子系统,传递给相应的子系统对象处理。

 

2. SubSystem(子系统角色):在软件系统中可以有一个或者多个子系统角色,每一个子系统可以不是一个单独的类,而是一个类的集合,他实现子系统的功。每一个子系统都可以被客户端直接调用,或者被外观角色调用,它处理有外观类传来的请求,子系统并不知道外观角色的存在,对于子系统而言,外观角色仅仅是另外的一个客户端而已。

 

外观模式的简单实现:

外观模式中所指的子系统是一个广义的概念,它可以使一个类,一个功能模块、系统的一个组成部分或者一个完整的系统。子系统通常是一些业务类,实现了一些具体的、独立的业务功能,其典型代码如下:

public class SubSystemA{
  public void methodA(){
  //具体实现代码
  }
}
public class SubSystemB{
  public void methodB(){
  //具体实现代码
  }
}

public class SubSystemC{
  public void methodC(){
  //具体实现代码
  }
}

在引入外观类只,与子系统业务类之间的交互统一由外观类来完成,在外观类中通常存在如下代码:

public class Facade{
  private SubSystemA obj1=new SubSystemA();
  private SubSystemB obj2=new SubSystemB();
  private SubSystemC obj3=new SubSystemC();

  public void mothod(){
    obj1.methodA();
    obj2.methodB();
    obj3.methodC();
  }
}

由于在外观类中维持了对子系统对象的引用,客户端可以通过外观类来间接调用子系统对象的业务方法,而无需与子系统对象进行直接交互。在引入外观类之后,客户端代码变得非常简单,典型代码如下:

public class Client{
   public static void main(String args[]){
    Facade facade = new Facade();
    facade.method();
   }
}

总之,外观模式,就是不让客户端知道子系统复杂的实现逻辑,减少客户类的所需处理对象的数目,并是子系统使用起来更加容易,让客户类和子系统实现松耦合的关系。

 

本文借鉴了刘伟老师的《Java设计模式》一书以及老师的相关博客

https://blog.csdn.net/LoveLion/article/details/17517213

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值