/**
* American Stock Exchange market(ASE) has a list of stocks.A stock object has two perspective information,symbol and price.<br>
* Class <b>StockMarket</b> is a class that represents the stock market.<br>
* Its constructor generates a collection of stocks using random numbers to build 3-letter stock symbols and random numbers for initial stock price.<br>
* Implement a Java application when the stock price has been changed,all those investors who are interested in the stock market will be notified by receiving the most recent price.<br>
* Create a driver class to test your implementation.
*
*/

package com.v5ent.rapid4j.pattern;

import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
import java.util.Random; /**
* American Stock Exchange market(ASE) has a list of stocks.A stock object has two perspective information,symbol and price.<br>
* Class <b>StockMarket</b> is a class that represents the stock market.<br>
* Its constructor generates a collection of stocks using random numbers to build 3-letter stock symbols and random numbers for initial stock price.<br>
* Implement a Java application when the stock price has been changed,all those investors who are interested in the stock market will be notified by receiving the most recent price.<br>
* Create a driver class to test your implementation.
* @author Mignet
*
*/
public class StockTest {
public static void main(String[] args) {
StockMarket market = new StockMarket(10);
market.show();
market.invest();
market.shuffle();
market.show();
}
} class StockMarket{
private List<Stock> list;
private int capacity;
public StockMarket(int capacity){
this.capacity=capacity;
init(this.capacity);
}
private List<Stock> init(int n){
list= new ArrayList<Stock>();
for(int i=0;i<n;i++){
list.add(emitStock());
}
return list;
}
/**
* 股票看板
*/
public void show(){
System.out.println("-------------Welcome to American Stock Exchange-------------------");
for(Stock s:list){s.show();}
System.out.println("------------------------------------------------------------------------");
}
/**
* 让投资人随机投资
*/
public void invest(){
Investor inv1 = new Investor("巴菲特");
Investor inv2 = new Investor("索罗斯");
//让投资人随机投资
for(Stock s:list){
//比如巴菲特只投资价格是偶数的股票
if(Math.round(s.price)%2==0){
s.addObserver(inv1);
System.out.println(String.format("[%s]投资了[%s]:[%.2f]", inv1.name,s.symbol,s.price));
}
//比如索罗斯只投资价格是3的倍数的股票
if(Math.round(s.price)%3==0){
s.addObserver(inv2);
System.out.println(String.format("[%s]投资了[%s]:[%.2f]", inv2.name,s.symbol,s.price));
}
}
}
//生成随机股票
private Stock emitStock() {
StringBuilder val = new StringBuilder(); Stock s;
Random random = new Random();
for(int i = 0; i < 3; i++) {
int temp = 65; //or 97
val .append((char)(random.nextInt(26) + temp));
}
s = new Stock(val.toString(),random.nextFloat()*100); return s;
} public void shuffle(){
for(Stock s:list){
s.shuffle();
}
} class Stock extends Observable {
public Stock(String symbol, float price) {
this.symbol=symbol;
this.price=price;
}
public void show(){
System.out.println(String.format("[%s]:[%.2f]", this.symbol,this.price));
}
private String symbol;
private float price;
//价格随机波动
public void shuffle(){
this.price = this.price+new Random().nextInt(10)-5;
this.setChanged();
this.notifyObservers();
}
}
class Investor implements Observer{
public Investor(String name){
this.name = name;
}
private String name;
@Override
public void update(Observable o, Object arg) {
Stock s = (Stock)o;
System.out.println(String.format("[%s]获取到[%s]的最新价格[%.2f]",this.name, s.symbol,s.price));
} }
}

观察者模式最佳案例实现[JAVA][原创]的更多相关文章

  1. (转载)Android之三种网络请求解析数据(最佳案例)

    [置顶] Android之三种网络请求解析数据(最佳案例) 2016-07-25 18:02 4725人阅读 评论(0) 收藏 举报  分类: Gson.Gson解析(1)  版权声明:本文为博主原创 ...

  2. Openresty最佳案例 | 汇总

    转载请标明出处: http://blog.csdn.net/forezp/article/details/78616856 本文出自方志朋的博客 目录 Openresty最佳案例 | 第1篇:Ngin ...

  3. atitit.泛型编程总结最佳实践 vO99 java c++ c#.net php

    atitit.泛型编程总结最佳实践 vO99 java c++ c#.net php \ 1. 泛型历史 1 由来 1 2. 泛型的机制编辑 1 机制 1 编译机制 2 3. 泛型方法定义1::前定义 ...

  4. JVM:从实际案例聊聊Java应用的GC优化

    原文转载自美团从实际案例聊聊Java应用的GC优化,感谢原作者的贡献 当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化.但GC算法复杂 ...

  5. Atitit. 拉开拉链zip文件 最佳实践实施 java c# .net php

    Atitit. 拉开拉链zip文件 的实现最佳实践 java c# .net php 1. Jdk zip 跟apache ant zip 1 2. Apache Ant包进行ZIP文件压缩,upzi ...

  6. Openresrt最佳案例

    第1篇:Nginx介绍 Nginx是一个高性能的Web 服务器,同时是一个高效的反向代理服务器,它还是一个IMAP/POP3/SMTP 代理服务器. 由于Nginx采用的是事件驱动的架构,能够处理并发 ...

  7. 最佳案例 | QQ 相册云原生容器化之路

    关于我们 更多关于云原生的案例和知识,可关注同名[腾讯云原生]公众号~ 福利: ①公众号后台回复[手册],可获得<腾讯云原生路线图手册>&<腾讯云原生最佳实践>~ ②公 ...

  8. 最佳案例 | 游戏知几 AI 助手的云原生容器化之路

    作者 张路,运营开发专家工程师,现负责游戏知几 AI 助手后台架构设计和优化工作. 游戏知几 随着业务不断的拓展,游戏知几AI智能问答机器人业务已经覆盖了自研游戏.二方.海外的多款游戏.游戏知几研发团 ...

  9. Android之三种网络请求解析数据(最佳案例)

    AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...

随机推荐

  1. phyreengine 3.12.0 安装遇到的问题

    发现他们文档都是旧的....略渣阿 需要安装vs2012 update4 vs2013update4 nvdia cg toolkits 3.1 以及 windows SDK 8.1 编译运行第一个s ...

  2. 2014年全球SEO行业调查报告

    前言: 1.该调查报告是MOZ每两年一度针对SEO行业的数据分析报告. 2.随着SEO的进化,该报告已不仅仅是SEO行业,今年的调查数据更多分析网络营销行业,可以称作"网络营销行业调查报告& ...

  3. Redis杂记

    参考资料: Redis 教程 | 菜鸟教程 : http://www.runoob.com/redis/redis-tutorial.html Redis快速入门 :http://www.yiibai ...

  4. Sqlite基础及其与SQLServer语法差异

    1 TOP 这是一个大家经常问到的问题,例如在SQLSERVER中可以使用如下语句来取得记录集中的前十条记录: SELECT TOP 10 * FROM [index] ORDER BY indexi ...

  5. 1024: [SCOI2009]生日快乐

    暴力题,N<=10,没注意到平均分,读题真是.. 我们对于一个矩形分成两块进行搜.然后求较大值. ans=min(ans,max(dfs(x,y/n*i,i),dfs(x,y/n*(n-i),n ...

  6. Android的Testing和Instrumentation

    Android提供了一系列强大的测试工具,它针对Android的环境,扩展了业内标准的JUnit测试框架.尽管你可以使用JUnit测试Android工程,但Android工具允许你为应用程序的各个方面 ...

  7. sql 语句的各种连接

    数据表: 1.两种连接表现方式一样 其中 where 条件语句可以省略,当时join 的on 语句不可省略 2.左连接,右连接 左连接:返回左表的所有数据,并根据条件返回左右表的连接结果,如果未匹配到 ...

  8. C# Task的使用---Task的启动

    .NET 4.0包含的新名称空间System.Threading.Tasks,它包含的类抽象出了线程功能.任务表示应完成的某个单元的工作.这个单元的工作可以在单独的线程中运行,也可以以同步的方式启动一 ...

  9. SQL Server 2008管理工具出现 远程过程调用失败0x800706be解决方法

    解决方法 出现此问题是因为在安装 Visual Studio 2012(VS2012) 时,会自动安装 "Microsoft SQL Server 2012 Express LocalDB& ...

  10. webmatrix

    http://www.microsoft.com/web/webmatrix/ WebMatrix is a free, lightweight, cloud-connected web develo ...