• 【设计模式】结构型模式之外观模式


    目录

    前言

    外观模式介绍

    定义

    简单模型

    优缺点

    与适配器模式差异

    外观模式实现

     总结


    前言

    今天和大家一起学习下外观模式,提到外观模式我们可能不是很理解这个模式是什么意思,是干什么用的。举个栗子,平时去银行办理业务,存钱、转账、买理财这些业务找谁,这是大堂经理和你一一对接,大堂经理充当的就是外观模式中重要的一环。下面我们来看看外观模式的一二三。

    外观模式介绍

    定义

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

    简单模型

    下面是外观模式的一个模型图,核心的元素有三个,一个客户端,一个外观模式,另一块是很繁杂的子系统,其中外观模式这一层,主要是简化子系统的接口,为客户端提供更简洁的调用。 

    关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。

     

    优缺点

    优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。

    缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。 

    与适配器模式差异

    • 外观模式不只是简化了接口,也将客户从组件的子系统中解耦
    • 外观模式和适配器模式可以包装许多类,但是外观模式的意图是简化接口,而适配器的意图是将接口转换成不同的接口

    外观模式实现

    1. public class Register{//挂号
    2. public void startup(){
    3. System.out.println("开始挂号");
    4. }
    5. }
    6. public class Outpatient {//门诊
    7. public void startup(){
    8. System.out.println("就诊");
    9. }
    10. }
    11. public class TakeMedicine{
    12. public void startup(){
    13. System.out.println("取药");
    14. }
    15. }
    16. public class ServerPerson{
    17. private Register register;
    18. private TakeMedicine takeMedicine ;
    19. private Outpatient outpatient ;
    20. public ServerPerson(){
    21. register= new Register ();
    22. takeMedicine = new TakeMedicine ();
    23. outpatient = new Outpatient ();
    24. }
    25. public void startup(){
    26. System.out.println("准备就医");
    27. register.startup();
    28. outpatient .startup();
    29. takeMedicine .startup();
    30. System.out.println("回家");
    31. }
    32. }
    33. //测试
    34. public class User {
    35. public static void main(String[] args) {
    36. ServerPerson serverPerson= new ServerPerson();
    37. serverPerson.startup();
    38. }
    39. }

     总结

    从上面的代码以及我们举的生活中的例子,我们可以发现,外观模式本质上就是整合接口,为客户端提供一个更简洁的接口。在我们的现实生活中,外观模式的例子还有很多,比如小爱同学、小度以及我们的手机智能助手等,都是典型的外观模式。从这一点上来讲,人工智能确实改变了我们的生活,让生活的繁杂开始变得简单,语音搜索、语音控制各类电器,真的是在万物互联~

  • 相关阅读:
    新电脑到手如何验机?保姆级攻略来了
    【面试题】Callable使用
    MySQL知识【可视化软件navicat安装&使用】第五章
    精选20个爆火的Python实战项目(含源码),直接拿走不谢
    ssm(Spring+SpringMVC+MyBatis)台球室内乒乓球室体育器械租赁收费系统
    安装多个jdk版本并切换
    Ubuntu Server CLI专业提示
    rhcsa(rh134)
    Android逆向fiddler抓包工具——理解HTTP协议
    Spring 源码(16)Spring Bean的创建过程(7)属性填充
  • 原文地址:https://blog.csdn.net/cx243698/article/details/126319031