设计模式之外观模式

设计模式之外观模式

外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,使子系统更容易使用。

应用场景

  • 因为子系统随着发展会变更的更复杂,客户端想更简单统一给子系统建立一个公共的调用方式。这样即使子系统的再增加可重用性而变得更加复杂,客户端也不必知道,因为客户端往往不需要针对某一个子系统进行特定的定制化。
  • 实现了子系统与客户之间的松耦合关系,这使得子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。

模式结构

外观模式中客户端依靠Facade类来调用多个子系统,来达到简化客户端调用的目的。

外观模式

例子中,每次开机的时候都要启动mysql,apache服务,两个还好,要是有更多服务岂不是很恼人,每次都要敲一大堆命令来开启服务。这时候可以使用外观模式,将所有服务加入到外观类中,每次开机只用调用外观类中的接口就行了。来达到简化客户端使用的目的。

代码

第一部分:子系统接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public interface Services {
void start();
void stop();
void restart();
}
// mysql 服务
public class MysqlService implements Services {
@Override
public void start() {
System.out.println("mysql is started");
}

@Override
public void stop() {
System.out.println("mysql is stopped");
}

@Override
public void restart() {
System.out.println("mysql is restart");
}
}
// apache 服务
public class ApacheService implements Services {
@Override
public void start() {
System.out.println("apache is started");
}

@Override
public void stop() {
System.out.println("apache is stopped");
}

@Override
public void restart() {
System.out.println("apache is restart");
}
}

第二部分:外观类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Facade {
List<Services> services;

public Facade() {
services = new ArrayList<>();
}

public void addService(Services services){
this.services.add(services);
}

public void start(){
for (Services services : this.services){
services.start();
}
}

public void stop(){
for (Services services : this.services){
services.stop();
}
}

public void restart(){
for (Services services : this.services){
services.restart();
}
}
}

第三部分:客户端调用

1
2
3
4
5
6
7
8
9
public class App {
public static void main(String[] args) {
Facade facade = new Facade();
facade.addService(new MysqlService());
facade.addService(new ApacheService());
facade.start();
facade.stop();
}
}

结果:

1
2
3
4
mysql is started
apache is started
mysql is stopped
apache is stopped
-------------本文结束感谢您的阅读-------------

本文标题:设计模式之外观模式

文章作者:NanYin

发布时间:2019年06月12日 - 12:06

最后更新:2019年08月12日 - 13:08

原始链接:https://nanyiniu.github.io/2019/06/12/2019-06-12-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E4%B9%8B%E5%A4%96%E8%A7%82%E6%A8%A1%E5%BC%8F/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。