Java8 策略模式及解惑

引用书中原话及代码:

观察者模式是另一种可被Lambda 表达式简化和改进的行为模式。在观察者模式中,被观察者持有一个观察者列表。当被观察者的状态发生改变,会通知观察者

传统的代码需要一层模板类,lambda表达式简化了模式,不需要去模板类

话不多说,show code

    interface LandingObserver {public void observeLanding(String name);}class Moon {private final List observers = new ArrayList<>();public void ****land****(String name) {for (LandingObserver observer : observers) {observer.observeLanding(name);}}public void startSpying(LandingObserver observer) {observers.add(observer);}}//传统模式需要本模板类,使用lambda表达式,本类不需要public class Nasa implements LandingObserver {@Overridepublic void observeLanding(String name) {if (name.contains("Apollo")) {System.out.println("We made it!");}}}Moon moon = new Moon();//日常操作(传统需要定义Nasa方法)moon.startSpying(new Nasa());//Lambda神操作//这样就可以省略模板类Nasamoon.startSpying(name -> {name.contains("Apollo");System.out.println("We made it");});      moon.land("Apollo 11");
测试结果:We made it!We made it

一些理解:

  1. 使用moon.startSpying(表达式),前提是接口满足Java8的函数接口条件
  2. 例中唯一的表达式是实现接口方法的过程,然后在land中调用已实现的接口方法
  3. 其实重点是自己对1,2的理解,之前对调用未实现的接口有一点疑惑,实则在调用前已经实现了。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部