设计模式01观察者模式(java)

先发代码,有空来写内容。

observer1

 1 import java.util.Observer;
 2 import java.util.Observable;
 3
 4 //学生类(Student)继承Observable后变得可以被观察
 5 class Student extends Observable{
 6     //属性
 7     private String name;
 8     private boolean isSleep = false;
 9     private boolean isLate = false;
10     //构造函数
11     public Student(){}
12     public Student(String name){
13         this.name = name;
14     }
15     //睡觉行为
16     public void sleep(){
17         System.out.println(name + " is sleeping");
18         isSleep = true;
19         setChanged();
20         notifyObservers();
21
22     }
23     public String toString(){
24         return name;
25     }
26 }
27 //教师类(Teacher)实现Observer接口成为观察者
28 class Teacher implements Observer{
29     @Override
30     public void update(Observable o,Object arg){
31             System.out.println("teacher: "+o+",wakeup!wakeup!");
32     }
33 }
34 //班主任类(ClassHead)实现Observer接口成为观察者
35 class ClassHead implements Observer{
36     @Override
37     public void update(Observable o,Object arg){
38             System.out.println("classHead: "+o+",cleanTheRoomAfterSchool");
39     }
40 }
41 public class ObserverDemo{
42     public static void main(String[] arguments){
43         Student tom = new Student("Tom");
44         tom.addObserver(new ClassHead());
45         tom.addObserver(new Teacher());
46
47         System.out.println("有 "+tom.countObservers()+" 个观察者在观察Tom");
48         tom.sleep();
49
50     }
51 }

observer2

import java.util.Map;
import java.util.HashMap;
import java.util.Observer;
import java.util.Observable;

//学生类(Student)继承Observable后变得可以被观察
class Student extends Observable{
    //属性
    private String name;
    private boolean isSleep = false;
    private boolean isLate = false;
    //构造函数
    public Student(){}
    public Student(String name){
        this.name = name;
    }
    //睡觉行为
    public void sleep(){
        System.out.println(name + " is sleeping");
        isSleep = true;
        setChanged();
        notifyObservers("sleep");

    }
    //迟到行为
    public void late(){
        System.out.println(name + " was lated");
        isLate = true;
        setChanged();
        notifyObservers("late");
    }
    public String toString(){
        return name;
    }
}
//教师类(Teacher)实现Observer接口成为观察者
class Teacher implements Observer{
    //参数arg作为key,该参数触发的回应作为value存储在Map中
    private Map<String,String> info = new HashMap<String,String>();
    public Teacher(){
        info.put("sleep",",wakeup!wakeup!");
        info.put("late",",come in.");
    }
    //添加键值对
    public boolean addSay(String k,String v){
        return info.put(k,v)==null?false:true;
    }
    @Override
    public void update(Observable o,Object arg){
            String say = info.get(arg);
            if(say == null){
                return;
            }
            System.out.println("teacher: "+o+say);
    }
}
//班主任类(ClassHead)实现Observer接口成为观察者
class ClassHead implements Observer{
    private Map<String,String> info = new HashMap<String,String>();
    public ClassHead(){
        info.put("sleep",",goOutWashBaFace");
        info.put("late",",cleanTheRoom!");
    }
    public boolean addSay(String k,String v){
        return info.put(k,v)==null?false:true;
    }
    @Override
    public void update(Observable o,Object arg){
            String say = info.get(arg);
            if(say == null){
                return;
            }
            System.out.println("classHead: "+o+say);
    }
}
public class ObserverDemo{
    public static void main(String[] arguments){
        Student tom = new Student("Tom");
        tom.addObserver(new ClassHead());
        tom.addObserver(new Teacher());

        System.out.println("有 "+tom.countObservers()+" 个观察者在观察Tom");
        tom.sleep();
        tom.late();
    }
}
时间: 2024-12-26 22:06:03

设计模式01观察者模式(java)的相关文章

大话设计模式_观察者模式(Java代码)

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们自己能够自动更新自己.简单描述:1个Subject类(可以是抽象类可以是接口),可以有多个具体Subject类(继承抽象Subject),此具体Subject持有多个观察者的引用,在此具体Subject状态发生变化的时候调用这些观察者的相应方法.另外,这些持有的引用是抽象的,不是具体的,而这些引用所指向的对象时具体的观察者(即需要作出更新的具体观察者,这些具体

设计模式之观察者模式(java内置)

DisplayElement.java,WeatherStation.java同上 WeatherData.java import java.util.Observable; public class WeatherData extends Observable { private float temperature; private float humidity; private float pressure; public float getTemperature() { return te

设计模式之第18章-观察者模式(Java实现)

设计模式之第18章-观察者模式(Java实现) 话说曾小贤,也就是陈赫这些天有些火,那么这些明星最怕的,同样最喜欢的是什么呢?没错,就是狗仔队.英文的名字比较有意思,是paparazzo,这一说法据说来自意大利电影<滴露牡丹开>中一个专门偷拍明星照片的一个摄影师的名字,“Paparazzo”,中文译为帕帕拉齐,俗语就是狗仔队.这些明星因狗仔队而荣,获得曝光率,也因狗仔队而损,被曝光负面新闻,不管怎么说,总之是“火起来了”,让明星们又爱又恨.(众人:鱼哥,你扯远了).咳咳,这个狗仔队其实嘛,也就

Java设计模式之观察者模式(Observer Pattern)

Observer Pattern 是一种常用的设计模式,它是一种事件监听模型.该模式有两个角色,一个是Subject, 另一个是Observer.Subject 保存有多个Observer的引用,一旦特定的事件发生,Subject会通知它所有的Observer,Observer得到该通知后执行相关程序逻辑.其中,Observer只有先向Subject注册后才能被Subject知晓.这就像订报纸,只有我们向出版社提出订报的申请,出版社才会把我们列入订阅者名单,然后每当新报纸印好时,出版社会通知订阅

折腾Java设计模式之观察者模式

观察者模式 Define a one-to-many dependency between objects where a state change in one object results in all its dependents being notified and updated automatically. 直译过来就是,定义对象间的一对多依赖关系,当一个对象的状态变更会自动通知和更新所有依赖项.像发布/订阅模式,事件通知模式,数据源/监听模式等都是性质一样. 观察者模式UML UM

&lt;&lt;Head First设计模式&gt;&gt;之观察者模式学习

1.概念 定义了对象之间的一对多依赖关系,当一个对象(主题对象)的状态改变时,它的所有依赖者(观察者对象)都会收到通知并自动更新. 2.优势 观察者模式实现了主题对象与观察者对象之间的松耦合,当有新的观察者时,无需修改主题对象的代码,只需要新的观察者对象实现接口.在程序运行的过程中,可以随时注册和删除观察者而不影响主体对象. 观察者模式使主题(Subject)对象和观察者(Observer)对象都可以被轻易地复用. 3.Java中观察者模式 Java API有内置的观察者模式,java.util

设计模式 1 ——观察者模式

设计模式目录: 设计模式 1 ——观察者模式 一.基本定义 何谓观察者模式?观察者模式定义了对象之间的一对多依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且自动更新. 在这里,发生改变的对象称之为观察目标,而被通知的对象称之为观察者.一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,所以么可以根据需要增加和删除观察者,使得系统更易于扩展. 观察者模式又称为发布-订阅模式. 二.基本结构 首先先看观察者模式的UML类图. 分析: Subject:目标.他把所有

2018.5.1 设计模式之观察者模式

https://www.cnblogs.com/tongkey/p/7170826.html https://www.w3cschool.cn/javadesignpattern/e1w91ihr.html 设计模式之观察者模式(Observer Pattern) 1.定义.概念 有时又称为模型---视图模式.源收听者模式或从属者模式是软件设计模式的一种,再此 模式中,一个目标物件管理所有想已于他的观察者: 观察者模式(Observer)完美的将观察者和被观察的对象分离开. 定义对象之间的一种一

设计模式:观察者模式--Observer

一.什么是观察者模式 1.生活中的观察者模式 1.警察抓小偷 在现实生活中,警察抓小偷是一个典型的观察者模式「这以一个惯犯在街道逛街然后被抓为例子」,这里小偷就是被观察者,各个干警就是观察者,干警时时观察着小偷,当小偷正在偷东西「就给干警发送出一条信号,实际上小偷不可能告诉干警我有偷东西」,干警收到信号,出击抓小偷.这就是一个观察者模式 2.装模作样写作业 小时候家里家活比较多,爸妈让我去干活的时候,我偶尔会说我要学习「其实不想去干活,当然只是偶尔,我还是常常干家务的」,然后爸妈就去地里了,我一