java8 观察者模式_Java8 Lambda表达式+观察者模式

本文介绍了观察者模式在图形用户界面和股票交易场景中的应用。通过实现Subject和Observer接口,当主题(如股票价格)发生变化时,所有注册的观察者(券商)都会收到通知并执行相应操作。在示例中,按钮点击事件触发观察者更新,不同类型的观察者根据特定条件(如关键字匹配)打印不同的响应消息。
摘要由CSDN通过智能技术生成

6079958150aa

image

6079958150aa

image.gif

/**

* 观察者模式是一种比较常见的方案,某些事件发生时(比如状态转变),如果一个对象(通

* 常我们称之为主题)需要自动地通知其他多个对象(称为观察者),就会采用该方案。创建图形

* 用户界面(GUI)程序时,你经常会使用该设计模式。这种情况下,你会在图形用户界面组件(比

* 如按钮)上注册一系列的观察者。如果点击按钮,观察者就会收到通知,并随即执行某个特定的

* 行为。 但是观察者模式并不局限于图形用户界面。比如,观察者设计模式也适用于股票交易的

* 情形,多个券商可能都希望对某一支股票价格(主题)的变动做出响应。

*/

public interface Subject {

/**注册一个新的观察者*/

void registerObserver(Observer o);

/**通知它的观察者一个新闻的到来*/

void notifyObserver(String tweet);

}

class Feed implements Subject{

private final List observers = CollUtil.newArrayList();

/**

* 注册一个新的观察者

*

* @param o 观察者

*/

@Override

public void registerObserver(Observer o) {

this.observers.add(o);

}

/**

* 通知它的观察者一个新闻的到来

*

* @param tweet 消息

*/

@Override

public void notifyObserver(String tweet) {

observers.forEach(o->o.notify(tweet));

}

}

6079958150aa

image.gif

public interface Observer {

void notify(String tweet);

}

class NYTimes implements Observer{

@Override

public void notify(String tweet) {

if(tweet!=null && tweet.contains("money")){

System.out.println("Breaking news in NY! " + tweet);

}

}

}

class Guardian implements Observer{

@Override

public void notify(String tweet) {

if(tweet!=null && tweet.contains("queen")){

System.out.println("Yet another news in London... " + tweet);

}

}

}

class LeMonde implements Observer{

@Override

public void notify(String tweet) {

if(tweet!=null && tweet.contains("wine")){

System.out.println("Today cheese,wine and news!! " + tweet);

}

}

}

6079958150aa

image.gif

public class FeedTest {

@Test

public void registerObserver() {

///java8以前写法

Feed f = new Feed();

f.registerObserver(new NYTimes());

f.registerObserver(new Guardian());

f.registerObserver(new LeMonde());

f.notifyObserver("The queen said her favourite book is java 8 in action!");

///java8 lambda表达式

f.registerObserver(tweet -> {

if(tweet!=null && tweet.contains("book")){

System.out.println("Point book->" + tweet);

}

});

f.registerObserver(tweet -> {

if(tweet!=null && tweet.contains("java")){

System.out.println("jdk->" + tweet);

}

});

f.notifyObserver("The queen said her favourite book is java 8 in action!");

}

}

6079958150aa

image.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值