一个统一管理的例子,用观察者模式实现

本文介绍了一种使用Java实现的观察者模式案例,通过具体代码展示了如何在查询系统中应用该模式来更新多个子系统,提高了系统的灵活性和扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如有这么一个需求

[img]http://dl.iteye.com/upload/attachment/0079/1757/4d61d9cf-15f8-3322-9824-fc1c5d621cd0.png[/img]
平台中需要实现一个统一管理的功能

实现方式1:

平台中定义类 CommonQuery.java ,且有Map<key,Object> 如 put(1,new Query1())
个子类都注册 CommonQuery

在平台中执行的时候 ,会根据Map的值遍历 ,然后调用个子系统的方法


实现方式2:
采用观察者模式

示例代码如下:

QueryMain.java

package test02;

import java.util.ArrayList;
import java.util.List;
import java.util.Observable;

public class QueryMain extends Observable
{

private static QueryMain instance;

public static QueryMain getInstance()
{
if (instance == null)
{
instance = new QueryMain();
}
return instance;

}

private QueryMain()
{

}

private String starTime;
/**
* 查询的结果
*/
private List<String> listAll = new ArrayList<String>();

/**
*
* 查询的参数
*
* @param startTime
* @author
* @date 2013-1-11 上午06:14:20
*/
public void doQuery(String startTime)
{
this.starTime = startTime;
this.listAll = new ArrayList<String>();
this.setChanged();
this.notifyObservers();
}

/**
* @return the starTime
*/
public String getStarTime()
{
return starTime;
}

/**
* @param starTime
* the starTime to set
*/
public void setStarTime(String starTime)
{
this.starTime = starTime;
}

/**
* @return the listAll
*/
public List<String> getListAll()
{
return listAll;
}

/**
* @param listAll
* the listAll to set
*/
public void setListAll(List<String> listAll)
{
this.listAll = listAll;
}

}




AbsQuery.java


package test02;

import java.util.Observable;
import java.util.Observer;

public abstract class AbsQuery extends Observable implements Observer
{

@Override
public void update(Observable o, Object arg)
{
doQuery((QueryMain) o);
}

public abstract void doQuery(QueryMain queryMain);

}




Query01.java

package test02;


public class Query01 extends AbsQuery
{

@Override
public void doQuery(QueryMain queryMain)
{
// System.out.println("Query01 doQuery :" + queryMain.getStarTime());

queryMain.getListAll().add("Query01....1");
queryMain.getListAll().add("Query01....2");
queryMain.getListAll().add("Query01....3");

}

}




Query02.java
package test02;


public class Query02 extends AbsQuery
{

@Override
public void doQuery(QueryMain queryMain)
{
// System.out.println("Query02 doQuery :" + queryMain.getStarTime());

queryMain.getListAll().add("Query02....1");
queryMain.getListAll().add("Query02....2");
queryMain.getListAll().add("Query02....3");

}

}


Test.java
package test02;

public class Test
{
public static void main(String[] args)
{
QueryMain queryMain = QueryMain.getInstance();

Query01 query01 = new Query01();
Query02 query02 = new Query02();

queryMain.addObserver(query01);
queryMain.addObserver(query02);

QueryMain.getInstance().doQuery("2013");
System.out.println("-------------");
for (String s : queryMain.getListAll())
{
System.out.println(s);
}

QueryMain.getInstance().doQuery("2014");
System.out.println("-------------");
for (String s : queryMain.getListAll())
{
System.out.println(s);
}



}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值