美文网首页Java
用男友、哥哥、父亲来讲观察者模式

用男友、哥哥、父亲来讲观察者模式

作者: 大黑跟小白的日常 | 来源:发表于2019-07-03 08:57 被阅读56次

介绍

1、首先需要一个被观察者;
2、被观察者需要具备广播通知的能力;
3、其次需要一批观察者;
4、观察者需要具备观察(接受通知)的能力;

具体见代码

被观察者是一个女孩
public class BeautifulGirl {
    //我的亲人
    private List<Concerner> concerners = new ArrayList<>();
    //我是否生病了
    private boolean isFallIll = false;
    //添加我的亲人
    public void addRelatives(Concerner concerner) {
        this.concerners.add(concerner);
    }
    public boolean isFallIll() {
        return isFallIll;
    }
    //生病了
    public void setFallIll(Boolean isFallIll) {
        this.isFallIll = isFallIll;
        if(isFallIll)
            this.notifyAllRelatives();            
    }
    //告知我的家人
    private void notifyAllRelatives() {
        for (Concerner observer : concerners) {
            observer.care();
        }
    }
}
需要具有亲属关系(观察者必须具备的能力)
public abstract class Concerner {
    protected BeautifulGirl girl;
    @SuppressWarnings("unused")
    private Concerner() {}
    protected Concerner(BeautifulGirl girl) {
        this.girl = girl;
        this.girl.addRelatives(this);
        System.out.println(this.getClass().getName());
    }
    //关心方法
    public abstract void care();
}
各个观察者如下
public class Boyfriend extends Concerner {
    public Boyfriend(BeautifulGirl girl) {
        super(girl);
    }
    @Override
    public void care() {
        boolean fallIll = this.girl.isFallIll();
        if (fallIll)
            System.out.println("亲爱的,我生病了");
        System.out.println("多喝水呀!宝贝~");
        System.out.println("--------------------");
    }
}
public class Brother extends Concerner {
    public Brother(BeautifulGirl girl) {
        super(girl);
    }
    @Override
    public void care() {
        boolean fallIll = this.girl.isFallIll();
        if (fallIll)
            System.out.println("哥哥,我生病了");
        System.out.println("要紧么?赶紧去医院看病呀!我先给你转1000块钱过去呀~");
        System.out.println("--------------------");
    }
}
public class Father extends Concerner {
    public Father(BeautifulGirl girl) {
        super(girl);
    }
    @Override
    public void care() {
        boolean fallIll = this.girl.isFallIll();
        if (fallIll)
            System.out.println("爸爸,我生病了");
        System.out.println("你现在在哪?我马上赶过来!");
        System.out.println("--------------------");
    }
}
如果女孩生病了,测试一下各个亲属的反应
public class ObserverTest {
    public static void main(String[] args) {
        BeautifulGirl girl = new BeautifulGirl();//被大家观察的目标
        new Boyfriend(girl);
        new Brother(girl);
        new Father(girl);
        girl.setFallIll(true);
    }
}

结果可见

image.png

相关文章

  • 用男友、哥哥、父亲来讲观察者模式

    介绍 1、首先需要一个被观察者;2、被观察者需要具备广播通知的能力;3、其次需要一批观察者;4、观察者需要具备观察...

  • 观察者模式

    观察者模式 我知道android的listview是用的观察者模式,Eventbus也是用的观察者模式。但是我还是...

  • 十三、模式

    1、用Reflect实现观察者模式

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 2017-12-27

    今天上午黄老师主要讲解他的项目,用python讲解了观察者模式。实现观察者模式的时候要注意,观察者和被观察对象之间...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • 观察者模式

    观察者模式概念 观察者模式是对象的行为模式,又叫作发布-订阅(publish/subscrible)模式。 观察者...

  • 设计模式-观察者模式

    观察者模式介绍 观察者模式定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为...

网友评论

    本文标题:用男友、哥哥、父亲来讲观察者模式

    本文链接:https://www.haomeiwen.com/subject/gxffjqtx.html