Java设计模式--门面模式(Facade)

概述


  • 门面模式中,一个子系统的外部与其内部的通信通过一个统一的外观类进行,Facade类将客户类与子系统的内部复杂性分隔开,使得客户类只需要与门面角色打交道,而不需要与子系统内部的很多对象打交道。
  • 门面模式是迪米特法则的一种具体实现,通过引入一个新的门面角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度。
  • 定义:为子系统中的一组接口提供一个统一的入口。门面模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
  • 门面模式又称为外观模式。
  • 是一种对象结构型模式。
  • 学习难度:★☆☆☆☆
  • 使用频率:★★★★★

优缺点


  • 优点
  • 缺点

类图


在这里插入图片描述

组成角色


  • 外观角色(Facade)
  • 子系统角色(SubSystem)

Code Example


外观角色(Facade)
/**
 * 门面角色:这是门面模式的核心。它被客户角色调用
 * 
 * @author yanbin
 * 
 */
public class Facade {

   /**
    * client 只关注统一的调用,不需要关注内部的子系统的实现。
    */
   public void method() {
      SubSystemA a = new SubSystemA();
      SubSystemB b = new SubSystemB();
      a.method();
      b.method();
   }

}
子系统角色(SubSystem)
/**
 * 子系统角色:实现了子系统的功能。对它而言,facade角色就和客户角色一样是未知的, 它没有任何facade角色的信息和链接。
 * 
 * @author yanbin
 * 
 */
public class SubSystemA {

   /**
    * 子系统方法A
    */
   public void method() {
      System.out.println("子系统方法A!");
   }

}
/**
 * 子系统B
 * 
 * @author yanbin
 * 
 */
public class SubSystemB {

   public void method() {
      System.out.println("子系统方法B!");
   }

}
客户端
/**
 * 门面模式:又称外观模式,为子系统中的一组接口提供一个一致的界面。门面模式定义一个高层接口,这一接口使得这一子系统更加容易使用<br>
 * 组成:门面角色; 子系统角色;客户角色。<br>
 * Facade 模式的一个典型应用就是进行数据库连接。<br>
 * 使用场景:当你要为一个复杂子系统提供一个简单接口时。客户程序与抽象类的实现部分之间存在着很大的依赖性。当你需要构建一个层次结构的子系统时,使用facade
 * 模式定义子系统中每层的入口点 <br>
 * 优点:它对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更
 * 加方便。它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。
 * 
 * @author yanbin
 * 
 */
public class FacadePattern {

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

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值