当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
计算机二级辅导:单例模式结合观察者模式
发布时间:2010/3/13 9:37:41 来源:城市学习网 编辑:MOON
  起因:多线程对数据库写操作
  办法:让多线程先把数据写到一个公共的arraylist中,等这个list足够大的时候,单开一个线程进行写操作。
  方案:
  首先,将这个arraylist使用单例模式思想,这样就可以让多线程都用它,并且写一起。
  然后,用观察者观察这个arraylist的长度,如果到了指定长度,就进行写操作,同时清空这个arraylist,方便多线程们继续使用。
  结果,实现了!!
  -
  感谢对此方案提出过宝贵意见的 姜同学,小强同学,大师同学~hoho排名不分先后O(∩_∩)O哈哈~
  demo: 让一个循环让单例的arraylist写数字...每当arraylist长度到5的时候,打印arraylist,并且置空。
  代码
  Singleton.java 单例的类
  Java代码
  package testArray;
  import java.util.ArrayList;
  import java.util.Observable;
  public class Singleton extends Observable{
  private ArrayListString arrayList=new ArrayListString();
  private static Singleton singleton=null;
  /**
  * 避免被继承
  */
  private Singleton(){
  }
  /**
  * 产生单例
  * @return
  */
  public static Singleton getInstance(){
  if(singletonnull){
  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 操作类
  Java代码
  package testArray;
  import java.util.ArrayList;
  import java.util.Observable;
  import java.util.Observer;
  public class DataOperation implements Observer {
  private ArrayListString 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
  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(i12){
  singleton.putElement(i+":ele");
  i++;
  }
  }
  }
  结果:
  Java代码
  0:ele
  1:ele
  2:ele
  3:ele
  4:ele
  5:ele
  *********************************
  6:ele
  7:ele
  8:ele
  9:ele
  10:ele
  11:ele
  *********************************
  :
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved