软件体系结构--外观模式

外观模式作为软件设计模式的一种,通过提供一个统一的接口来简化子系统的交互,降低了客户端与子系统的耦合度。例如,汽车的'一键启动'功能和电脑的开机按键都是外观模式的应用。这种模式在简化操作的同时,也可能导致系统中增加更多的中间类。其优点在于提高了代码的简洁性和安全性,但缺点是可能增加系统复杂度。
摘要由CSDN通过智能技术生成

概念

外观模式提供了一个接口,用来访问子系统中定义的一堆接口。换句话说,外观模式提供了一个高层接口,使得可以更简便的使用子系统。

现在很多汽车上都有“一键启动”的功能。这个“一键启动”的按钮,就可以理解为外观模式提供的高层接口。汽车中包含了各种各样的子系统,子系统之间也许还有各种各样的关系。

image

那如果我们如果要一个一个的启动车上的各类子系统才能最终发动车辆是不是就过于繁琐了。外观模式提供的接口对这些子系统、接口的操作进行了整合,用户仅需要调用外观模式提供的接口即可。

image

在外观模式中主要包含三个角色:

  • 子系统:已有模块或子系统,提供了一系列复杂的接口或功能
  • 外观:它了解子系统,并对外暴露一个简单的接口
  • 客户:调用外观提供的接口来实现功能,无需了解复杂的子系统

例子

除了上述的汽车的例子,还有一个很合适的例子就是电脑的开机过程。

电脑中包含了CPU、内存、硬盘、显卡、网卡等等硬件,而我们只需要按下电源键就可以使这些硬件启动。很显然,电源键就是外观模式所提供的高层接口。

image

各种硬件类:

public class CPU{
    public void start(){
        System.out.println("CPU启动");
    }
}

public class Memory{
    public void start(){
        System.out.println("内存启动");
    }
}

public class Disk{
    public void start(){
        System.out.println("硬盘启动");
    }
}

public class GPU{
    public void start(){
        System.out.println("GPU启动");
    }
}

如果没有开机键的话,我们需要这么做:

new CPU().start();
new Memory().start();
new Disk().start();
new GPU().start();

如果有了开机键,这些都可以交给开机键去做:

开机键:

public class PowerBtn{
    public void start(){
        new CPU().start();
        new Memory().start();
        new Disk().start();
        new GPU().start();
    }
}

现在只需要调用开机键的start方法即可:

new PowerBtn().start();

总结

外观模式很好的体现了迪米特法则,即每一个类应该尽量少的知道别的类。拿上面的例子来说,原本我们需要知道CPU、内存等子系统,用了外观模式之后,我们仅需要知道外观模式所提供的接口即可。

优点

将复杂的接口简单化,减少了客户端与接口之间的耦合,提高了安全性。

缺点

可能产生大量的中间类(外观类),一定程度上增加了系统的复杂度。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值