目录
今天和大家一起学习下外观模式,提到外观模式我们可能不是很理解这个模式是什么意思,是干什么用的。举个栗子,平时去银行办理业务,存钱、转账、买理财这些业务找谁,这是大堂经理和你一一对接,大堂经理充当的就是外观模式中重要的一环。下面我们来看看外观模式的一二三。
外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
下面是外观模式的一个模型图,核心的元素有三个,一个客户端,一个外观模式,另一块是很繁杂的子系统,其中外观模式这一层,主要是简化子系统的接口,为客户端提供更简洁的调用。
关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。
优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
- 外观模式不只是简化了接口,也将客户从组件的子系统中解耦
- 外观模式和适配器模式可以包装许多类,但是外观模式的意图是简化接口,而适配器的意图是将接口转换成不同的接口
- public class Register{//挂号
-
- public void startup(){
- System.out.println("开始挂号");
- }
-
- }
-
- public class Outpatient {//门诊
-
- public void startup(){
- System.out.println("就诊");
- }
-
- }
-
- public class TakeMedicine{
-
- public void startup(){
- System.out.println("取药");
- }
-
- }
-
- public class ServerPerson{
- private Register register;
- private TakeMedicine takeMedicine ;
- private Outpatient outpatient ;
-
- public ServerPerson(){
- register= new Register ();
- takeMedicine = new TakeMedicine ();
- outpatient = new Outpatient ();
- }
-
- public void startup(){
- System.out.println("准备就医");
- register.startup();
- outpatient .startup();
- takeMedicine .startup();
- System.out.println("回家");
- }
-
-
- }
-
- //测试
- public class User {
-
- public static void main(String[] args) {
- ServerPerson serverPerson= new ServerPerson();
- serverPerson.startup();
- }
- }
从上面的代码以及我们举的生活中的例子,我们可以发现,外观模式本质上就是整合接口,为客户端提供一个更简洁的接口。在我们的现实生活中,外观模式的例子还有很多,比如小爱同学、小度以及我们的手机智能助手等,都是典型的外观模式。从这一点上来讲,人工智能确实改变了我们的生活,让生活的繁杂开始变得简单,语音搜索、语音控制各类电器,真的是在万物互联~