• 观察者模式——java实现


    问题描述:

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

    类图:

    Java源代码:

     1 //Observer.java
     2 package shiyan21;
     3 
     4 public interface Observer {
     5     public void buy();
     6     public void cry();
     7 }  
     8 //Subject.java
     9 package shiyan21;
    10 
    11 import java.util.ArrayList;
    12 
    13 public abstract class Subject {
    14     protected ArrayList<Observer> observers;
    15     public Subject(){
    16         observers=new ArrayList<>();
    17     }
    18     public void attach(Observer a){
    19         observers.add(a);
    20     } 
    21     public void detach(Observer a){
    22         observers.remove(a);
    23     }
    24     public abstract void up();
    25     public abstract void down();
    26 }
    27 //Gufen.java
    28 package shiyan21;
    29 
    30 import java.util.ArrayList;
    31 public class Gufen extends Subject{
    32     public void up(){
    33         System.out.println("****股份上涨5%****");
    34         for(Observer guan:observers){
    35             guan.buy();
    36             }
    37     }
    38     public void down(){
    39         System.out.println("****股份下跌5%****");
    40         for(Observer guan:observers){
    41             guan.cry();
    42             }
    43     }
    44 }
    45 //Gumin.java
    46 package shiyan21;
    47 
    48 public class Gumin implements Observer{
    49     private String name;
    50     public Gumin(String a){name=a;}
    51     public void buy(){
    52         System.out.println("股民"+name+"买了一些股票");
    53     }
    54     public void cry(){
    55         System.out.println("股民"+name+"哭了");
    56     }
    57 }  
    58 //main.java
    59 package shiyan21;
    60 public class main {
    61     public static void main(String[] args) {
    62         Gufen f=new Gufen();
    63         Gumin g1=new Gumin("小张");
    64         Gumin g2=new Gumin("小王");
    65         f.attach(g1);
    66         f.attach(g2);
    67         f.up();
    68         f.down();
    69     }
    70 }

    运行结果:

  • 相关阅读:
    Linux Shell 用法
    gdb调试用法
    grep 用法总结
    Cmake用法
    Win64/Linux 上PyMouse安装
    两道拓扑排序的问题
    hiho一下第76周《Suzhou Adventure》
    这类问题需要利用二进制的特殊性
    这种题应该诸位处理
    两道人数多,课程少,query多的题
  • 原文地址:https://www.cnblogs.com/znjy/p/15582938.html
Copyright © 2020-2023  润新知