首页 > 编程语言 >观察者模式——java实现

观察者模式——java实现

时间:2022-12-22 18:33:06浏览次数:38  
标签:Gumin java Observer void 观察者 模式 observers public

问题描述:

当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场

类图:

 

 代码:

//Observer.java
package shiyan21;

public interface Observer {
    public void buy();
    public void cry();
}
//Subject.java
package shiyan21;

import java.util.ArrayList;

public abstract class Subject {
    protected ArrayList<Observer> observers;
    public Subject(){
        observers=new ArrayList<>();
    }
    public void attach(Observer a){
        observers.add(a);
    }
    public void detach(Observer a){
        observers.remove(a);
    }
    public abstract void up();
    public abstract void down();
}
//Gufen.java
package shiyan21;

import java.util.ArrayList;
public class Gufen extends Subject{
    public void up(){
        System.out.println("****股份上涨5%****");
        for(Observer guan:observers){
            guan.buy();
            }
    }
    public void down(){
        System.out.println("****股份下跌5%****");
        for(Observer guan:observers){
            guan.cry();
            }
    }
}
//Gumin.java
package shiyan21;

public class Gumin implements Observer{
    private String name;
    public Gumin(String a){name=a;}
    public void buy(){
        System.out.println("股民"+name+"买了一些股票");
    }
    public void cry(){
        System.out.println("股民"+name+"哭了");
    }
}
//main.java
package shiyan21;
public class main {
    public static void main(String[] args) {
        Gufen f=new Gufen();
        Gumin g1=new Gumin("小张");
        Gumin g2=new Gumin("小王");
        f.attach(g1);
        f.attach(g2);
        f.up();
        f.down();
    }
}

  运行截图:

 

标签:Gumin,java,Observer,void,观察者,模式,observers,public
From: https://www.cnblogs.com/15132949hao/p/16999372.html

相关文章

  • 关于Java子类对象的初始化
    classB{publicB(){System.out.println("B对象被初始化!");}}classCextendsB{publicC(){System.out.println("C对象被初始化!");......
  • Flask - 动态路由和debug模式
    一、前言参考https://www.cnblogs.com/poloyy/p/14994738.html前面几篇文章讲的路由路径都是固定的,就是一个路径和一个视图函数绑定,当访问这条路径时会触发相应的处......
  • centos7中卸载java1.8,并安装java12
     001、查看系统[root@pc1home]#cat/etc/redhat-releaseCentOSLinuxrelease7.9.2009(Core)  002、查看当前的java版本[root@pc1home]#java-version......
  • Java多线程
    核心概念线程就是独立的执行路径在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程。main()称之为主线程,为系统的入口,用于执行整个程序;在一个进程......
  • JavaScript的this的指向详解
    关于this的指向,主要有一下几个版块,①全局环境下的this指向②函数内的this③对象中的this④箭头函数中的this⑤构造函数中的this⑥原型链中的this【补充一点】关于this,谁调......
  • java入门
    JAVAHelloWorld创建一个文件夹存放代码/java/code新建一个java文件文件后缀名为.javahello.java编写代码publicclassHelloWorld{ publicstaticvoidm......
  • 用JAVA发送含有附件的邮件
    1、用JAVA发送含有附件的邮件publicvoidsendKREmailAndFile(String[]toEmail,StringmailSubject,StringmailContent,List<File>fileList)throwsMessagingExcep......
  • java异常
    1、异常概述(1)异常分为:编译时异常运行时异常(2)编译时异常:javacIDE(,‘’),一般是指的语法错误,比较容易修正(3)运行时的异常:运行错误和逻辑错误1/0;(4)不正常的事件异常的类,创建对......
  • 一、【Java】多线程与高并发
    一、启动多线程的三种方式1、继承Thread接口类实现run()方法staticclassMyThredextendsThread{@Overridepublicvoidrun(){system.out.println("Hellow......
  • javaweb总结4-servlet基础
    正如ASP.NET的核心是IHttpHandler一样,JavaWeb的核心是Servlet接口,位于javax.servlet命名空间中。Filter的概念可以参考ASP.NET的HttpModule,Servlet中的各种Listener可以参......