`

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

    博客分类:
  • Web
 
阅读更多
如有这么一个需求
 

平台中需要实现一个统一管理的功能 

实现方式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);
        }
        
        
        
    }
}
  • 大小: 17.3 KB
分享到:
评论

相关推荐

    Javascript 模式实例 观察者模式

    在园里有许多牛人都已经写过这些文章,不过大多的例子都是.NET,今天我要举一个JS的使用实例.有兴趣的朋友可以先了解一下一些牛人的,比如李会军大哥设计模式篇中观察者的那一节 ...

    设计模式精解 译者:熊节 程序员必看书籍之一 part2

    设计模式精解(Design Patterns Explained) ...如何实现关键模式——Strategy(策略)、Observer(观察者)、Bridge(桥接)、Decorator(装饰)等等。 共同点/变化点分析、设计模式以及它们如何帮助理解抽象类。

    设计模式精解-掌握设计模式

    本书从一个新的视角描述面向对象设计,将...\r\n 如何实现关键模式——Strategy(策略)、Observer(观察者)、Bridge(桥接)、Decorator(装饰)等等。\r\n 共同点/变化点分析、设计模式以及它们如何帮助理解抽象类。

    源码:阎宏设计模式光盘

    com.javapatterns.observerawt 专题:观察者模式与AWT中的事件处理 com.javapatterns.observersax 专题:观察者模式与SAX2浏览器 com.javapatterns.observertimer 专题:观察者模式与Swing定时器 ...

    设计模式精解 译者:熊节 程序员必看书籍之一 part1

    设计模式精解(Design Patterns Explained) ...如何实现关键模式——Strategy(策略)、Observer(观察者)、Bridge(桥接)、Decorator(装饰)等等。 共同点/变化点分析、设计模式以及它们如何帮助理解抽象类。

    asp.net知识库

    一个XSLT的简单例子 XSLXSLT板主题整理 xsl入门的好文章 新手学习XSL的好东西 XSL语法介绍 XSL学习心得 - 调用属性值 XSLT与XML转换的详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0时代,RSS你会用了吗?(技术...

    二十三种设计模式【PDF版】

    设计模式之 Observer(观察者) 介绍如何使用 Java API 提供的现成 Observer 设计模式之 Iterator(迭代器) 这个模式已经被整合入Java的Collection.在大多数场合下无需自己制造一个Iterator,只要将对象装入...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    观察者模式命名:ResourceObserver。 多选 20.关于数据库模糊检索的描述,下列哪些说法符合《阿里巴巴Java开发手册》:ABD A .绝对禁止左模糊。 B .绝对禁止全模糊。 C .绝对禁止右模糊。 D .全模糊或左...

Global site tag (gtag.js) - Google Analytics