首页 > 编程语言 >观察者模式--Java实现

观察者模式--Java实现

时间:2023-11-27 09:27:15浏览次数:33  
标签:GuMin Java Observer -- void 观察者 observers java public

相关类图

具体代码

//Observer.java
package org.example.test019;

public interface Observer {
    public void buy();
    public void cry();
}

//Subject.java
package org.example.test019;

import java.util.ArrayList;

public abstract class Subject {
    protected ArrayList<Observer> observers = new ArrayList();

    public Subject() {
        observers = new ArrayList<>();
    }
    public void attach(Observer observer) {
        observers.add(observer);
    }

    public void detach(Observer observer) {
        observers.remove(observer);
    }

    public abstract void up();
    public abstract void down();
}

//GuFen.java
package org.example.test019;

import javax.swing.*;

public class GuFen extends Subject {

    @Override
        public void up() {
        System.out.println("股份上涨5%");
        for (Observer guan : observers) {
            guan.buy();
        }
    }

    @Override
        public void down() {
        System.out.println("股份下降5%");
        for (Observer guan : observers) {
            guan.cry();
        }
    }
}

//GuMin.java
package org.example.test019;

public class GuMin implements Observer {
    private String name;

    public GuMin(String name) {
        this.name = name;
    }
    @Override
        public void buy() {
        System.out.println("股民" + name + "买了一些股票");
    }

    @Override
        public void cry() {
        System.out.println("股民" + name + "大哭一场");
    }
}

//Main.java
package org.example.test019;

public class Main {
    public static void main(String[] args) {
        GuMin g1 = new GuMin("张三");
        GuMin g2 = new GuMin("李四");

        GuFen f = new GuFen();
        f.attach(g1);
        f.attach(g2);

        f.up();
        f.down();
    }
}

运行结果

标签:GuMin,Java,Observer,--,void,观察者,observers,java,public
From: https://www.cnblogs.com/liuzijin/p/17858429.html

相关文章

  • 状态模式--Java实现
    具体代码//Account.javapackageorg.example.test020;publicclassAccount{publicAccountStategetAccountState(){returnaccountState;}publicvoidsetAccountState(AccountStateaccountState){this.accountState=accountState;......
  • 设计模式实验
    软件设计                 石家庄铁道大学信息学院 实验21:观察者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解观察者模式的动机,掌握该模式的结构;2、能够利用观察者模式解决实际问题。    [实验任务一]:股票提醒......
  • 策略模式--Java实现
    具体代码//Travel.javapackageorg.example.test021;publicinterfaceTravel{publicvoidtravel();}//Person.javapackageorg.example.test021;publicclassPerson{publicTravelgetTravel(){returntravel;}publicvoidsetTrav......
  • 2023版 STM32实战8 独立看门狗(IWDG)
     IWDG简介 STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障。 说人话就是能解决程序跑飞的问题。  编写代码思路 -1-使用这个功能必须解除写保护-2-IW......
  • 本周刷屏的两大热点「GitHub 热点速览」
    如果你逛HackerNews或者是推特,你一定会被multipleWindow3dScene这个跨窗口渲染项目的成果刷屏,毕竟国内的技术平台上也出现了不少的模仿项目。另外一个热点,便是你在白板上画图,AI猜你在画什么的draw-fast,让你的画作更加精美。此外,还有非常实用的简历生成器Reactive-Resume......
  • vue2跨级组件传值
    //祖先组件importSonfrom'./Son'exportdefault{components:{Son},provide(){return{money:1000000000}}}子孙组件<template> <div>  孙子组件  <p>这个是爷爷传给我的钱:{{money}}</p> </div&......
  • Walrus 0.4发布:单一配置、多态运行,体验下一代应用交付模型
    今天,我们高兴地宣布云原生统一应用平台Walrus0.4正式发布,这是一个里程碑式的版本更新。新版本采用了全新的应用模型——仅需进行单一配置,即可在多种模态的基础设施及环境中运行包括应用服务及周边依赖资源在内的完整应用系统。“Youbuildit,yourunit”在这一版本中成为现......
  • 洛谷P5719 分类平均
    intmain(){ intn,k,add=0,abb=0; doublesum=0,cnt=0; cin>>n>>k; for(inti=1;i<=n;++i) if(i%k==0) { add++; sum+=i; } cout<<fixed<<setprecision(1)<<sum/add<<''; for(inti=1;i<=n;++i) if(i%k......
  • break和continue
    break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句(break语句也在switch语句中使用)continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定......
  • socket.on可以直接添加自定义事件吗,理解socket的事件触发与响应
    在Web开发中,socket.on通常是用于注册处理特定事件的回调函数的方法。它主要用于处理Socket.IO库中的预定义事件,例如"connect"、"disconnect"、"message"等。然而,Socket.IO也允许你添加自定义事件,以便在客户端和服务器之间进行自定义的双向通信。要使用socket.on来处理自定义事件,......