观察者模式
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
|
public class 观察者模式 { public static void main(String[] args) { 运营商 电信运营商 = new 电信运营商(); 电信运营商.增加用户(new 苹果手机用户(138)); 电信运营商.增加用户(new 苹果手机用户(136)); 电信运营商.增加用户(new 安卓手机用户(158)); 电信运营商.发送短信("开会"); } } interface 电信用户{ 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
|
public class 观察者模式 { public static void main(String[] args) { 运营商 电信运营商 = new 电信运营商(); 电信运营商.增加用户((String message)->{ System.out.println("安卓电信短信:"+message); }); 电信运营商.增加用户((String message)->{ System.out.println("苹果电信短信:"+message); }); 电信运营商.发送短信("开会"); } } @FunctionalInterface interface 电信用户{ 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