如何使用设计模式的外观模式
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"如何使用设计模式的外观模式",在日常操作中,相信很多人在如何使用设计模式的外观模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何使用设计模式的外观
千家信息网最后更新 2026年11月01日如何使用设计模式的外观模式
这篇文章主要介绍"如何使用设计模式的外观模式",在日常操作中,相信很多人在如何使用设计模式的外观模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何使用设计模式的外观模式"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1、概述
外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。
避免多种不相关的功能污染单一外观, 使其变成又一个复杂结构。客户端和其他外观都可使用附加外观。
2、适用场景
1)如果你需要一个指向复杂子系统的直接接口, 且该接口的功能有限, 则可以使用外观模式。外观将会提供指向子系统中最常用功能的快捷方式, 能够满足客户端的大部分需求。
2)如果需要将子系统组织为多层结构, 可以使用外观。你可以为每个层次创建一个外观, 然后要求各层的类必须通过这些外观进行交互。
3、实例
有以下场景:
当前有学生子系统,该系统有三个接口,查询学生姓名,查询学生年龄,查询学生家庭地址。
有一个教学系统,要分别去调用这三个接口。
有一个成绩系统,要分别调用者三个接口。
有一个考试系统,也要分别调用这三个系统。
3.1 不使用外观模式时候
/** * 学生 */ public class Student { private String name = "狼王"; private int age = 25; private String address = "上海"; public Student(String name, int age, String address) { this.name = name; this.age = age; this.address = address; } public Student(){ } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }/** * 学生 */ public class Student { private String name = "狼王"; private int age = 25; private String address = "上海"; public Student(String name, int age, String address) { this.name = name; this.age = age; this.address = address; } public Student(){ } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }/** * 年龄接口 */ @Service public class StudentAgeService implements IStudentAge{ @Override public int getAge() { Student student = new Student(); return student.getAge(); } }@Service public class StudentNameService implements IStudentName{ @Override public String getName() { Student student = new Student(); return student.getName(); } }三个外部服务
/** * 教育服务 */ @Service public class EduService { @Autowired private StudentNameService studentNameService; @Autowired private StudentAgeService studentAgeService; @Autowired private StudentAddressService studentAddressService; public void getStudentName(){ System.out.println("学生姓名是:" + studentNameService.getName()); } public void getStudentAge(){ System.out.println("学生年龄是:" + studentAgeService.getAge()); } public void getStudentAddress(){ System.out.println("学生地址是:" + studentAddressService.getAddress()); } }/** * 考试服务 */ @Service public class ExamService { @Autowired private StudentNameService studentNameService; @Autowired private StudentAgeService studentAgeService; @Autowired private StudentAddressService studentAddressService; public void getStudentName(){ System.out.println("学生姓名是:" + studentNameService.getName()); } public void getStudentAge(){ System.out.println("学生年龄是:" + studentAgeService.getAge()); } public void getStudentAddress(){ System.out.println("学生地址是:" + studentAddressService.getAddress()); } }/** * 成绩服务 */ @Service public class ScoreService { @Autowired private StudentNameService studentNameService; @Autowired private StudentAgeService studentAgeService; @Autowired private StudentAddressService studentAddressService; public void getStudentName(){ System.out.println("学生姓名是:" + studentNameService.getName()); } public void getStudentAge(){ System.out.println("学生年龄是:" + studentAgeService.getAge()); } public void getStudentAddress(){ System.out.println("学生地址是:" + studentAddressService.getAddress()); } }3.2 使用外观模式
在学生服务这里增加一个外观service
/** * 外观模式服务 */ @Service public class StudentFacedService { @Autowired private StudentNameService studentNameService; @Autowired private StudentAgeService studentAgeService; @Autowired private StudentAddressService studentAddressService; public String getStudentName(){ return studentNameService.getName(); } public int getStudentAge(){ return studentAgeService.getAge(); } public String getStudentAddress(){ return studentAddressService.getAddress(); } }三个调用服务只需要引入外观服务
/** * 教育服务 */ @Service public class EduService { @Autowired private StudentFacedService studentFacedService; public void getStudentName() { System.out.println("学生姓名是:" + studentFacedService.getStudentName()); } public void getStudentAge() { System.out.println("学生年龄是:" + studentFacedService.getStudentAge()); } public void getStudentAddress() { System.out.println("学生地址是:" + studentFacedService.getStudentAddress()); } }/** * 考试服务 */ @Service public class ExamService { @Autowired private StudentFacedService studentFacedService; public void getStudentName() { System.out.println("学生姓名是:" + studentFacedService.getStudentName()); } public void getStudentAge() { System.out.println("学生年龄是:" + studentFacedService.getStudentAge()); } public void getStudentAddress() { System.out.println("学生地址是:" + studentFacedService.getStudentAddress()); } }/** * 成绩服务 */ @Service public class ScoreService { @Autowired private StudentFacedService studentFacedService; public void getStudentName() { System.out.println("学生姓名是:" + studentFacedService.getStudentName()); } public void getStudentAge() { System.out.println("学生年龄是:" + studentFacedService.getStudentAge()); } public void getStudentAddress() { System.out.println("学生地址是:" + studentFacedService.getStudentAddress()); } }4、分析
以上两种方式代码结构如下所示:


从上面两张图可以看到,对于外部服务来说,极大的缩减了代码复杂度,只需要调用学生服务的一个接口。
5、总结
优点:
让客户端代码独立独立于复杂的子系统,且减少对于子系统的依赖。
缺点:
过于庞大的外观,会使得该外观称成为上帝对象,造成所有类的耦合,可通过它操作所有的类功能。
到此,关于"如何使用设计模式的外观模式"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
学生
外观
模式
服务
年龄
接口
地址
姓名
子系统
设计模式
设计
复杂
三个
系统
功能
结构
学习
代码
客户
成绩
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
精品咖啡豆
上海喔噻互联网科技有限公司
北京路客互联网科技有限公司
鸠鸠互联网科技
美国互联网科技巨头监管
北京互联网科技公司
互联网 的科技创新
极限挑战互联网科技
互联网科技logo
中国互联网金融科技基金
广西拼得多互联网科技有限公司
北京华百购互联网科技有限公司
贵州叶脉互联网科技有限公司所属行业
互联网校园科技培训
互联网科技公司实习生
伊宁互联网科技做什么的
陕西云淼互联网科技公司
银川新华互联网科技学校是国营吗
中国科技和美国互联网
北京天晋互联网科技有限公司
伟宏互联网科技
广州百单互联网科技有限公司
新华互联网科技学校
科技和互联网公司
互联网通讯科技
金融科技还是互联网
镁科技互联网资讯平台
北京天晋互联网科技有限公司
互联网的黑科技实验室
广州全民伙伴互联网科技有限公司