六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 30|回复: 0

单例模式结合观察者模式

[复制链接]

升级  26%

23

主题

23

主题

23

主题

秀才

Rank: 2

积分
89
 楼主| 发表于 2013-1-23 02:20:07 | 显示全部楼层 |阅读模式
起因:多线程对数据库写操作
办法:让多线程先把数据写到一个公共的arraylist中,等这个list足够大的时候,单开一个线程进行写操作。
方案:
      首先,将这个arraylist使用单例模式思想,这样就可以让多线程都用它,并且写一起。
      然后,用观察者观察这个arraylist的长度,如果到了指定长度,就进行写操作,同时清空这个arraylist,方便多线程们继续使用。
      结果,实现了!!


-----
感谢对此方案提出过宝贵意见的 姜同学,小强同学,大师同学~~~hoho~~排名不分先后~~O(∩_∩)O哈哈~

demo: 让一个循环让单例的arraylist写数字...每当arraylist长度到5的时候,打印arraylist,并且置空。

代码如下:
Singleton.java    单例的类

package testArray;import java.util.ArrayList;import java.util.Observable;public class Singleton extends Observable{private ArrayList<String> arrayList=new ArrayList<String>();private static Singleton singleton=null;/** * 避免被继承 */private Singleton(){}/** * 产生单例 * @return */public static Singleton getInstance(){if(singleton==null){singleton=new Singleton();}return singleton;}/** * 只要能置空arraylist就行. */public static void clearInstance(){singleton.arrayList.clear();}public  void putElement(String str){arrayList.add(str);if(arrayList.size()>5){setChanged();  //触发观察者模式notifyObservers(arrayList);}}}

DataOperation.java  操作类
package testArray;import java.util.ArrayList;import java.util.Observable;import java.util.Observer;public class DataOperation implements Observer {private ArrayList<String> arrayList=null;public void update(Observable o, Object arg) {if(arg instanceof ArrayList){arrayList=(ArrayList)arg;for(String s : arrayList){System.out.println(s);}System.out.println("*********************************");Singleton.clearInstance();//想在这里让那个单例的list置空}}}

测试类 Test.java
package testArray;public class Test {/** * @param args */public static void main(String[] args) {Singleton singleton=Singleton.getInstance();singleton.addObserver(new DataOperation());int i=0;while(i<12){singleton.putElement(i+":ele");i++;}}}

结果:
0:ele1:ele2:ele3:ele4:ele5:ele*********************************6:ele7:ele8:ele9:ele10:ele11:ele*********************************
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表