栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习之:观察者模式(Observer)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java学习之:观察者模式(Observer)

文章目录
  • 核心设计
  • 类图
  • 案例代码

核心设计
  • 一个 subject 里面聚合了一个观察者的列表,你可以把这个 subject 看做是目标对象,也就是观察者的观察对象
  • 观察者也把 subject 作为一个属性
  • subject 中的某个行为会触发观察者的某些行为
  • observer 设计成抽象类是为了扩展,可以产生很多不同的观察者,都观察这个 subject
类图

案例代码
  • subject 是一个厨师
  • obeserver 分两种:端茶 observer 和 上菜 observer
  • 每次厨师做好一个菜,端茶的就去端茶,上菜的就去上菜

package 设计模式.观察者模式;

public abstract class Observer {
    protected String name;
    protected Subject subject;

    public Observer(String name, Subject subject){
        this.subject = subject;
        this.name = name;
    }

    public abstract void delivery();
    public abstract void makeTea();
}

package 设计模式.观察者模式;

public class ObserverNoodles extends Observer {

    public ObserverNoodles(String name, Subject subject) {
        super(name, subject);
    }

    @Override
    public void delivery() {
        System.out.println(name + " delicious food is delivering");
    }

    @Override
    public void makeTea() {

    }
}

package 设计模式.观察者模式;

public class ObserverTeaMaker extends Observer {
    public ObserverTeaMaker(String name, Subject subject) {
        super(name, subject);
    }

    @Override
    public void delivery() {

    }

    @Override
    public void makeTea() {
        System.out.println(this.name +  " is making tea for client");
    }
}

package 设计模式.观察者模式;

import javafx.beans.binding.Objectexpression;

import java.util.ArrayList;

public class Subject {
    private String name="chef";
    private ArrayList observers = new ArrayList<>();

    public Subject(){
        observers.add(new ObserverNoodles("noodleDeliver",this));
        observers.add(new ObserverTeaMaker("teaMaker",this));
    }

    public void cook(){
        System.out.println("chef is making delicious food!!");
        noticeAllObserver();
    }

    public void noticeAllObserver(){
        for (Observer obs :
                observers) {
            if (obs instanceof ObserverNoodles) {
                obs.delivery();
            }
            else {
                obs.makeTea();
            }
        }

    }
}

package 设计模式.观察者模式;

public class Demo {
    public static void main(String[] args) {
        Subject chef = new Subject();
        chef.cook();
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298727.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号