博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
外观模式(Facade)
阅读量:5947 次
发布时间:2019-06-19

本文共 2001 字,大约阅读时间需要 6 分钟。

一、外观模式介绍

面向对象的一个比较重要的法则:迪米特法则(最少知识原则):一个软件实体应当尽可能少的与其他实体发生相互作用。

外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口。这个接口使得这一子系统更加容易使用。说白了,就可以理解为封装

外观模式的核心:为子系统提供统一的入口,封装子系统的复杂性,便于客户端调用

例1:股民炒股

未使用外观模式情况

要让股民尽可能少的与股票直接打交道,给其提供一个蒙面,让股民跟蒙面打交道。这样就符合了迪米特法则,让股民尽可能少的与股票打交道了。

增加了外观模式后的类图:

例2:客户喝茶,客户要尽可能少的与子系统(开水,茶具,茶叶...)打交道,提供一个服务员,统一了喝茶的入口。

例3:公司注册流程

未使用外观模式的注册流程

使用了外观模式后呢?也就是找个代理公司来帮我们做这些事

外观模式类结构图:

 

二、外观模式代码实现

外观模式代码实现

未使用外观模式情况下,代码如下

子系统代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package 
com.fz.facade;
 
/**
 
* 所有子系统
 
*/
public 
class 
SubSystemClass {
    
public 
void 
methodOne(){
        
System.out.println(
"子系统方法1"
);
    
}
}
class 
SubSystemClass2{
    
public 
void 
methodTwo(){
        
System.out.println(
"子系统方法2"
);
    
}
}
class 
SubSystemClass3{
    
public 
void 
methodThree(){
        
System.out.println(
"子系统方法3"
);
    
}
}

测试代码:

1
2
3
4
5
6
7
8
9
10
public 
static 
void 
main(String[] args) {
    
//未使用外观模式情况
    
SubSystemClass s1 = 
new 
SubSystemClass();
    
SubSystemClass2 s2 = 
new 
SubSystemClass2();
    
SubSystemClass3 s3 = 
new 
SubSystemClass3();
    
s1.methodOne();
    
s2.methodTwo();
    
s3.methodThree();
     
}

增加外观模式后:新增一个Facade类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package 
com.fz.facade;
/**
 
* 外观模式:封装子系统,对外提供一个门面方法
 
*/
public 
class 
Facade {
    
//所有子系统的引用
    
private 
SubSystemClass s1 = 
null
;
    
private 
SubSystemClass2 s2 = 
null
;
    
private 
SubSystemClass3 s3 = 
null
;
    
//构造子系统的引用
    
public 
Facade() {
        
this
.s1 = 
new 
SubSystemClass();
        
this
.s2 = 
new 
SubSystemClass2();
        
this
.s3 = 
new 
SubSystemClass3();
    
}
    
/**
     
* 具体的外观方法
     
*/
    
public 
void 
facade(){
        
s1.methodOne();
        
s2.methodTwo();
        
s3.methodThree();
    
}
}

 

再次测试:

1
2
3
4
5
6
public 
static 
void 
main(String[] args) {       
    
//使用了外观模式后
    
System.out.println(
"-----------------------"
);
    
Facade facade = 
new 
Facade();
    
facade.facade();
}

两次的输出结果为:

            子系统方法1

            子系统方法2

            子系统方法3

            -----------------------

            子系统方法1

            子系统方法2

            子系统方法3

 

三、开发中外观模式应用场景

其实外观模式就是我们常见的封装,在我们实际开发中,遇到的各种对子系统各模块封装的逻辑,都可以理解为外观模式

JDBC封装后的,commons提供的DBUtils类

Hibernate提供的工具类,Spring JDBC工具类等

 

参考资料:

  大话设计模式(带目录完整版).pdf

  HEAD_FIRST设计模式(中文版).pdf

  尚学堂_高淇_java300集最全视频教程_【GOF23设计模式】

转载地址:http://akbxx.baihongyu.com/

你可能感兴趣的文章
Grumpy:Google 用 Go 开发的 Python 运行时
查看>>
Kubernetes 1.14 版本发布:正式支持Windows 节点,持久化本地卷进入GA
查看>>
区块链和数据科学:如果同时应用这两种技术,将会实现什么?
查看>>
AVG插件泄漏Chrome用户数据
查看>>
免费微信公众号专用h5在线电影票API
查看>>
专访刘刚:360手机卫士的性能监控与优化
查看>>
FB正在大规模重构React Native,预计今年发布
查看>>
从0到1:腾讯Yoo视频底层页推荐系统实践
查看>>
推荐10个CI/CD工具,用于云平台集成交付
查看>>
云平台宕机引发的系列思考,企业如何自救?
查看>>
Java EE跟JCP说再见
查看>>
整洁代码之道——重构
查看>>
Oracle加入CNCF,发布Kubernetes on Oracle Linux以及Terraform Kubernetes Cloud Installer
查看>>
Scrum指南更新:Ken Schwaber、Jeff Sutherland访谈
查看>>
在瑞士最大银行驱动创新
查看>>
CRI Shimv2:一种 Kubernetes 集成容器运行时的新思路
查看>>
机器人操作系统来到Windows
查看>>
通过规模化Scrum创造最新技术的打印机
查看>>
时序数据库DolphinDB和TimescaleDB 性能对比测试报告
查看>>
准备好了?测试人员迟早会被要求测试包含区块链技术的解决方案
查看>>