GOF23之外观模式

一、核心作用:

  1. 外观模式提供一个统一的接口,用来访问系统中的一群接口,这个接口使得一群接口易于管理
  2. 为子系统提供以恶入口,封装子系统的复杂性,便于客户调用
  3. 外观模式定义了一个高层的接口,让子系统更容易的使用
  4. 违背了开闭原则
  5. 符合迪米特原则(Low of Demeter 最少知道原则):一个软件实体应当尽可能少的与其他实体发生相互作用

在这里插入图片描述

二、常见应用场景:

1、JDBC工具类

三、代码示例:

在这里插入图片描述

一、子系统:
package com.hezeu.facade;

public interface 税务局 {
    void taxCertificate();  //办理税务登记证
}


class 海淀税务局 implements 税务局 {

    @Override
    public void taxCertificate() {
        System.out.println("在海淀税务局办理税务登记证!");
    }
}
二、外观封装类:
package com.hezeu.facade;

/**
* @Classname RegisterFacade
* @Description TODO
* @Date 2020/2/23 下午 09:59
* @Created by 朱进博 [email protected]
*/
public class RegisterFacade {
        public void register(){
                工商局  a = new 海淀区工商局();
                a.checkName();
                质检局 b = new 海淀质检局();
                b.orgCodeCertificate();
                税务局  c  = new 海淀税务局();
                c.taxCertificate();
                银行  d = new 中国工商银行();
                d.openAccount();
        }
}
三、测试类:
package com.hezeu.facade;

/**
* @Classname Client
* @Description TODO
* @Date 2020/2/23 下午 10:02
* @Created by 朱进博 [email protected]
*/
public class Client {
        public static void main(String[] args) {
                new RegisterFacade().register();
        }
}
结果如下:

在这里插入图片描述

四、外观模式的优缺点:

优点:
引入外观模式,使客户对子系统的使用变得简单,减少了与子系统的关联对象,实现了子系统与客户之间的松耦合关系
只提供了一个访问子系统的统一接口,不应i想用户直接使用子系统类
降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程
缺点:
不能很好的限制客户使用子系统类,如果对客户访问子系统类做了太多限制则减少了可变性和灵活性
在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端原代码,违背了开闭原则

感谢阅读,水平有限,如有错漏,还请不吝赐教

发布了11 篇原创文章 · 获赞 13 · 访问量 1295

猜你喜欢

转载自blog.csdn.net/weixin_44789225/article/details/104468849