首页 > 其他分享 >11.21

11.21

时间:2024-11-21 14:42:27浏览次数:1  
标签:Gumin name Observer 11.21 public observers void

实验 21:观察者模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解观察者模式的动机,掌握该模式的结构;

2、能够利用观察者模式解决实际问题。

 

[实验任务一]:股票提醒

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

实验要求:

1. 画出对应类图;

 

2. 提交源代码;

package test21;

 

import java.util.ArrayList;

public class Gufen extends Subject{

    public void up(){

        System.out.println("****股份上涨15%****");

        for(Observer guan:observers){

            guan.buy();

        }

    }

    public void down(){

        System.out.println("****股份下跌15%****");

        for(Observer guan:observers){

            guan.cry();

        }

    }

}

 

package test21;

 

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+"哭了");

    }

}

 

package test21;

 

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();

    }

}

package test21;

 

 

 

public interface Observer {

      public void buy();

      public void cry();

  }

 

package test21;

 

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();

}

 

#include<iostream>

#include<list>

#include<string>

using namespace std;

//抽象观察者

class Observer{

protected:

    string name;

public:

    virtual void buy()=0;

    virtual void cry()=0;

};

//具体观察者

class Gumin:public Observer{

public:

    Gumin(string name){

        this->name=name;

    }

    void buy(){

        cout<<"股民"<<name<<"买了一些股票"<<endl;

    }

    void cry(){

        cout<<"股民"<<name<<"哭了"<<endl;

    }

};

//抽象主题类

class Subject{

protected:

    list<Observer*> observers;

public:

    void attach(Observer *obs){

        observers.push_back(obs);

    }

    void detach(Observer *obs){

        observers.remove(obs);

    }

    virtual void up()=0;

    virtual void down()=0;

};

//具体主题类

class Gufen:public Subject{

public:

    void up(){

        cout<<"*****股份上涨15%*****"<<endl;

        list<Observer*>::iterator iter = observers.begin();

        for(; iter != observers.end(); iter++)

            (*iter)->buy();

    }

    void down(){

        cout<<"*****股份下跌15%*****"<<endl;

        list<Observer*>::iterator iter = observers.begin();

        for(; iter != observers.end(); iter++)

            (*iter)->cry();

    }

};

//测试函数

int main(){

    Observer *obs1,*obs2;

    obs1=new Gumin("小张");

    obs2=new Gumin("小龚");

    Subject *sub;

    sub=new Gufen();

    sub->attach(obs1);

    sub->attach(obs2);

    sub->up();

    sub->down();

}

标签:Gumin,name,Observer,11.21,public,observers,void
From: https://www.cnblogs.com/0608lin/p/18560711

相关文章

  • PDF24 Creator(PDF工具箱) v11.21.0 绿色版
    PDF24Creator(PDF工具箱)v11.21.0绿色版 PDF24Creator是一款简单易用的多功能PDF创建工具。软件基于PDF打印机的原理而制作,用户使用这款软件可以帮助你轻松创建PDF文件。软件除了基本的PDF创建功能外,还有一个PDF转换功能,可以将其他格式的文件转换为磁盘PDF......
  • 11.21浏览一行信息
    <%@pagecontentType="text/html;charset=UTF-8"language="java"%><%@pageimport="java.sql.*"%><%@pageimport="javax.naming.*"%><%@pageimport="javax.*"%><html><body&g......
  • 11.21
    今天实现Mapper类LogOnMapperpackagecom.example.mapper;importcom.example.pojo.Department;importcom.example.pojo.Staff;importorg.apache.ibatis.annotations.*;importjava.time.LocalDate;importjava.util.List;@MapperpublicinterfaceLogONMapper{......
  • 11.21
    1.用结构体存放如下表中的数据,然后输出每个人的姓名和实发工资(实发工资=基本工资+浮动工资-支出)姓名基本工资浮动工资支出Tom1240.00800.0075.00Lucy1360.00900.0050.00Jack1560.001000.0080.00程序代码:#inclu......
  • 11.21
    今日学习内容<%@pageimport="java.sql.*"%><%@pageimport="java.sql.DriverManager"%><%--CreatedbyIntelliJIDEA.TochangethistemplateuseFile|Settings|FileTemplates.--%><%@pagecontentType="text/htm......
  • 11.21
    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。......
  • 11.21学习小结 //LCA
    倍增求LCA参考博文:https://www.cnblogs.com/hulean/p/11144059.html参考博文:https://www.cnblogs.com/jvxie/p/4854719.html·记录每个点的深度,和往前2^i的祖先。·先把两个点提到同一高度,再统一开始跳。不可以直接跳到相同祖先处,因为可能是LCA的祖先·裸板子:洛谷P3379wa......
  • 11.21b级请假审批实现了
           <!DOCTYPEhtml><htmlxmlns:th="http://www.thymeleaf.org"><head><metacharset="UTF-8"><metaname="renderer"content="webkit"><metahttp-equiv=......
  • 11.21打卡
    1.复制IP(93)有效IP地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和"192.168.1.1" 是 有效 IP地址,但是 "0.011.255.245"、"192.168.1.312" 和 "[email protected]" 是 无效 IP地址。给定一个只......
  • 11.21每日总结
    实验内容与完成情况:(一) 编程实现以下指定功能,并用Hadoop提供的HBaseShell命令完成相同任务:  List列出hbase的表  查看表中的数据并且向指定表中添加数据。  删除列族。  统计表的行数和删除表。(二) HBase数据库操作1.创建表。     ......