JAVA 设计模式 外观模式

用途

外观模式 (Facade)

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

外观模式是一种结构型模式

结构

图-外观模式结构图

Facade : 了解每个子系统类的功能,负责分发客户端的请求给各个子系统去处理。

class Class1 {
 public void op1() {
         System.out.println("方法1");
     }
 }
 
 class Class2 {
 public void op2() {
         System.out.println("方法2");
     }
 }
 
 class Class3 {
 public void op3() {
         System.out.println("方法3");
     }
 }

Subsystem Classes : 实现子系统功能。在不感知 Facade 的情况下,处理 Facade 对象分配的工作,

class Facade {
 private Class1 one = new Class1();
 private Class2 two = new Class2();
 private Class3 three = new Class3();
 
 public void op1() {
         System.out.println("Facade op1()");
         one.op1();
     }
 
 public void op2() {
         System.out.println("Facade op2()");
         two.op2();
     }
 
 public void op3() {
         System.out.println("Facade op3()");
         three.op3();
     }
 
 public void Method() {
         System.out.println("Facade Method()");
         three.op3();
         two.op2();
         one.op1();
     }
 }

测试代码

public class FacadePattern {
 public static void main(String[] args) {
         Facade facade = new Facade();
         facade.Method();
 
         facade.op1();
     }
 }

运行结果

Facade Method()
 方法3
 方法2
 方法1
 Facade op1()
 方法1

要点

1、外观模式为复杂子系统提供了一个简单接口,并不为子系统添加新的功能和行为。

2、外观模式实现了子系统与客户之间的松耦合关系。

3、外观模式没有封装子系统的类,只是提供了简单的接口。 如果应用需要,它并不限制客户使用子系统类。因此可以再系统易用性与通用性之间选择。

4、外观模式注重的是简化接口,它更多的时候是从架构的层次去看整个系统,而并非单个类的层次。

推荐

本文属于 JAVA设计模式系列

参考资料

《大话设计模式》《HeadFirst设计模式》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux驱动个人学习

设计模式

一、设计模式简介 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面...

2725
来自专栏java架构师

设计模式学习笔记之组合模式模式

我们常常会遇到一类具有“容器”特征的对象,他们既是容器,本身也是对象。比如,公司人员管理中的人,他们是处于不同层级,每个层的人下边,又有下属。也就是数的结构。 ...

2786
来自专栏前端儿

JavaScript中常见的十五种设计模式

在JavaScript中并没有类这种概念,JS中的函数属于一等对象,在JS中定义一个对象非常简单(var obj = {}),而基于JS中闭包与弱类型等特性,在...

881
来自专栏写代码的海盗

脱掉Golang的第一层衣裳 golang入坑系列

海鳖曾欺井内蛙,大鹏张翅绕天涯。强中更有强中手,莫向人前满自夸。 各位看官,现在开始脱衣裳。你不用脱,自个衣裳要穿好了,别脱下来。我们是来学Golang的,不...

2463
来自专栏撸码那些事

【抽象那些事】不必要的抽象

1015
来自专栏Golang语言社区

Golang 语言gc 问题

在实际使用go语言的过程中,碰到了一些看似奇怪的内存占用现象,于是决定对go语言的垃圾回收模型进行一些研究。本文对研究的结果进行一下总结。 什么是垃圾回收? 曾...

35216
来自专栏二进制文集

Java 与 C/C++ 的编译器对比

这两天重温了周志明的《深入理解Java虚拟机》第2版,发现第11章第4节关于 Java 编译器的内容写得太棒了~本文完全摘自《深入理解Java虚拟机》第2版 0...

706
来自专栏ImportSource

设计WeakReference的那段日子

当你遇到要开发一个缓存,并且是短期内就过期的那种缓存的需求?你会怎么实现呢? Mark Reinhold看着1.1版的Java代码沉思着,最近社区传来1.1版本...

2696
来自专栏liuchengxu

代码健康: 减少嵌套, 降低复杂性

原文: Code Health: Reduce Nesting, Reduce Complexity

802
来自专栏Kevin-ZhangCG

二十三种设计模式总结

定义:Ensure a class has only one instance, and provide a global point of access to...

752

扫码关注云+社区