为什么需要外观模式?
先举个例子,就拿我自己来讲,当程序员多年了,攒了一些小钱,现在年过35,被市场淘汰了,于是呢,衣锦还乡,回到老家想盖一座房子,如果让我自己来盖,是不是就很费事,我得去买造房子需要的材料,钢筋、混凝土、还得请工人,
如果这些事情如果都是我来做的话,这实在是太麻烦了,有没有人能够帮我做这件事呢?就是有一个人帮我把上面的事情都做了,这样我就省心了;那么这时候我就可以找个包工头,付钱给他就好了,他会直接帮我把房子建好,我只要坐着看电视等他建好就行了!
外观模式的概念
其实非常好理解,在程序的层面,就是做了一层封装,基于面向对象的封装概念,我把底层的功能都实现好了,你只需要调用我就好了;也可以理解为是引入了一个中介,这个中介可以帮你做完需要做的事情,而包工头就是这个中介;
类图
优点
- 可以屏蔽子系统,提高子系统的独立性;
- 使用简单,用户不需要了解子系统的实现逻辑;
- 简化依赖关系
缺点
- 不规范的编程方式,
- 没有抽象编程的概念,只是通过中间层调用,转换服务方的接口;
使用场景
- 重构,简化复杂的系统代码
- 控制了入口,可以进行统一监控
- 希望封装或者隐蔽子系统时
代码实现
- package com.designPatterm.facade;
-
- /**
- * 门面模式
- */
- public class FacadeTest {
-
- public static void main(String[] args) {
-
- BaoGongTou baoGongTou = new BaoGongTou();
- baoGongTou.startWork();
- }
- }
-
- // 钢筋
- class GangJing{
- public void show(){
- System.out.println("买了钢筋");
- }
- }
- // 混凝土
- class HunNingTu{
- public void show(){
- System.out.println("买了混凝土");
- }
- }
- // 师傅
- class ShiFu{
- public void show(){
- System.out.println("请了师傅");
- }
- }
- // 包工头
- class BaoGongTou{
- private GangJing gangJing;
- private HunNingTu hunNingTu;
- private ShiFu shiFu;
- public BaoGongTou(){
- System.out.println("包工头就绪");
- gangJing = new GangJing();
- hunNingTu = new HunNingTu();
- shiFu = new ShiFu();
- }
- //包工头开始干活
- public void startWork(){
- gangJing.show();
- hunNingTu.show();
- shiFu.show();
- }
- }
打印结果
- 包工头就绪
- 买了钢筋
- 买了混凝土
- 请了师傅
外观模式很简单,是编码中经常用到的一种方式,特别是重构代码的时候。