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 条评论
登录 后参与评论

相关文章

来自专栏Bingo的深度学习杂货店

Q221 Maximal Square

Given a 2D binary matrix filled with 0's and 1's, find the largest square contai...

3385
来自专栏java一日一条

我是如何击败Java自带排序算法的

Java 8 对自带的排序算法进行了很好的优化。对于整形和其他的基本类型, Arrays.sort() 综合利用了双枢轴快速排序、归并排序和启发式插入排序。这个...

521
来自专栏赵俊的Java专栏

最长上升连续子序列

1324
来自专栏IT派

那些神奇的一行 Python 代码

Python 这门语言非常的有趣,不仅可以做高大上的人工智能、大数据、机器学习。还可以用来做 Web、爬虫。还有其它很多的应用。今天我就给大家展示下一行 Pyt...

1114
来自专栏和蔼的张星的图像处理专栏

50. 数组剔除元素后的乘积两个遍历

给定一个整数数组A。 定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法。...

824
来自专栏Hadoop数据仓库

HAWQ + MADlib 玩转数据挖掘之(五)——奇异值分解实现推荐算法

一、奇异值分解简介         奇异值分解简称SVD(singular value decomposition),可以理解为:将一个比较复杂的矩阵用更小更简...

20510
来自专栏木子昭的博客

机器学习三剑客之NumpyNumpy计算(重要)

NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy内部解除了Python的PI...

3426
来自专栏用户2442861的专栏

【剑指offer】八皇后问题

转载请注明出处:http://blog.csdn.net/ns_code/article/details/26614999

541
来自专栏一心无二用,本人只专注于基础图像算法的实现与优化。

十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。

      图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。这个看似简单...

2706
来自专栏数据结构与算法

P1583 魔法照片

题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人。佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值...

2657

扫码关注云+社区