设计模式系列:外观模式

概念

外观模式用于简化系统中一个或者多个复杂的类。外观模式相当直接,容易理解。它提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个
高层接口,让子同更容易使用。

实现

图片

  • 类图:

图片

MyOneDay:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package com.littlehui.design.facade;

/**
* Created by littlehui on 2018/1/16.
* 我的一天
*/
public class MyOneDay {

private Morning morning;

private Road road;

private Back back;

private Office office;

private Rest rest;

public MyOneDay(Morning morning, Office office, Back back, Road road, Rest rest) {
this.morning = morning;
this.office = office;
this.back = back;
this.road = road;
this.rest = rest;
}

/**
* 在家起床
*/
public void morning() {
morning.morningStepA();
morning.morningStepB();
morning.moringStepC();
}

/**
* 去公司
*/
public void goToOffice() {
road.onLoadA();
road.onLoadB();
road.onLoadC();
road.onLoadE();
}

/**
* 工作,coding
*/
public void work() {
office.officeA();
office.officeB();
office.officeC();
}

public void backToHome() {
back.backStepA();
back.backStepB();
back.backStepC();
back.backStepD();
}

public void rest() {
rest.restA();
rest.restB();
rest.restC();
rest.restD();
}

public void myWholeDay() {
morning();
goToOffice();
work();
backToHome();
rest();
}
}

Morning:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.littlehui.design.facade;

/**
* Created by littlehui on 2018/1/16.
*/
public class Morning {

public void morningStepA() {
System.out.println("起床刷牙洗脸");
}

public void morningStepB() {
System.out.println("吃早饭");
}

public void moringStepC() {
System.out.println("带上背包出门");
}
}

Office:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.littlehui.design.facade;

/**
* Created by littlehui on 2018/1/16.
*/
public class Office {

public void officeA() {
System.out.println("放下背包");
}

public void officeB() {
System.out.println("去除电脑开机");
}

public void officeC() {
System.out.println("打开IDEA 愉快地codeing");
}
}

Client:

1
2
3
4
5
6
7
8
9
10
11
package com.littlehui.design.facade;

/**
* Created by littlehui on 2018/1/16.
*/
public class Client {
public static void main(String[] args) {
MyOneDay myOneDay = new MyOneDay(new Morning(), new Office(), new Back(), new Road(), new Rest());
myOneDay.myWholeDay();
}
}

以上其他类略:
详情github链接: 设计模式

场景

总结

外观模式体现了设计模式中 最少知识原则。不让太多的类耦合在一起。