设计模式-观察者模式

  1. 观察者模式

观察者模式

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
/**
* @USER: lynn
* @DATE: 2020/4/27
**/
public class 观察者模式 {
public static void main(String[] args) {
运营商 电信运营商 = new 电信运营商();
电信运营商.增加用户(new 苹果手机用户(138));
电信运营商.增加用户(new 苹果手机用户(136));
电信运营商.增加用户(new 安卓手机用户(158));
电信运营商.发送短信("开会");
}
}
interface 电信用户{ //Observe
void 接受短信(String message);
}
class 苹果手机用户 implements 电信用户{
int phone;

public 苹果手机用户(int phone) {
this.phone = phone;
}

@Override
public void 接受短信(String message) {
System.out.println("iPhone:"+phone+";电信短信:"+message);
}
}
class 安卓手机用户 implements 电信用户{
int phone;

public 安卓手机用户(int phone) {
this.phone = phone;
}

@Override
public void 接受短信(String message) {
System.out.println("Android:"+phone+";移动短信:"+message);
}
}

interface 运营商{
void 增加用户(电信用户 user);
void 发送短信(String message);
}

class 电信运营商 implements 运营商{

private final List<电信用户> 用户们 = new ArrayList<>();

@Override
public void 增加用户(电信用户 user) {
用户们.add(user);
}

@Override
public void 发送短信(String message) {
用户们.forEach(电信用户 -> {
电信用户.接受短信(message);
});
}
}

与策略模式一样,如果接口仅有一个方法,可以不需要实现具体观察者对象,如苹果手机用户、安卓手机用户

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
/**
* @USER: lynn
* @DATE: 2020/4/27
**/
public class 观察者模式 {
public static void main(String[] args) {
运营商 电信运营商 = new 电信运营商();
电信运营商.增加用户((String message)->{
System.out.println("安卓电信短信:"+message);
});
电信运营商.增加用户((String message)->{
System.out.println("苹果电信短信:"+message);
});
电信运营商.发送短信("开会");
}
}
@FunctionalInterface
interface 电信用户{ //Observe
void 接受短信(String message);
}
interface 运营商{
void 增加用户(电信用户 user);
void 发送短信(String message);
}

class 电信运营商 implements 运营商{

private final List<电信用户> 用户们 = new ArrayList<>();

@Override
public void 增加用户(电信用户 user) {
用户们.add(user);
}

@Override
public void 发送短信(String message) {
用户们.forEach(电信用户 -> {
电信用户.接受短信(message);
});
}
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 yanglau0527@gmail.com

文章标题:设计模式-观察者模式

文章字数:580

本文作者:Cynaith

发布时间:2020-05-02, 01:23:15

最后更新:2020-05-02, 01:25:10

原始链接:https://cynaith.github.io/2020/05/02/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏