论坛首页 综合技术论坛

观察者模式的应用

浏览 2542 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-11-26  

这上一周项目组想做一个权限的东东,通过用户的的权限,看能不能执行某个业务方法,然后我模拟了一个环境。今天上班写出来与网友分享:

先有两个业务类

java 代码
  1. public class BusinessA {   
  2.     public static void a() {   
  3.         System.out.println("println A");   
  4.     }   
  5. }   
  6. public class BusinessB {   
  7.     public static void b() {   
  8.         System.out.println("println B");   
  9.     }   
  10. }  

还要有被观察的对象类

java 代码
  1. public class UserObersered extends Observable {   
  2.     public void codeChange(Object obj) {   
  3.        setChanged();   
  4.        User user = (User)obj ;   
  5.        notifyObservers(user.getMarkcode());   
  6.     }   
  7. }  
还要有一个业务方法实现类,这个类是通过上面两个业务类完成一个具体的业务。
java 代码
  1. public class Service implements Observer{   
  2.     private List<String> list = new ArrayList<String>();   
  3.   
  4.     public void businessMethod() throws Exception {   
  5.         System.out.println("start service ");   
  6.         if (list.contains("1")) {   
  7.             // BusinessA.a();   
  8.             throw new Exception("您没有这个权限访问此方法.");   
  9.         } else {   
  10.             BusinessB.b();   
  11.         }   
  12.         System.out.println("end service ");   
  13.     }   
  14.   
  15.     public void update(Observable arg0, Object arg1) {   
  16.         if (arg1 instanceof String[]) {   
  17.             for (int i = ((String[]) arg1).length - 1; i >= 0; i--) {   
  18.                 list.add(((String[]) arg1)[i]);   
  19.             }   
  20.         }   
  21.         try {   
  22.             businessMethod();   
  23.         } catch (Exception e) {   
  24.             // TODO Auto-generated catch block   
  25.             e.printStackTrace();   
  26.         }   
  27.     }   
  28. }  
做好这此这后做一下测试:
java 代码
  1. UserObersered userOber = new UserObersered();   
  2.           
  3.        
  4.     Service service = new Service();   
  5.                        
  6.        userOber.addObserver(service);   
  7.           
  8.        User user = new User();   
  9.        String[] markcode = {"1","2"};   
  10.        user.setMarkcode(markcode);   
  11.        userOber.codeChange(user);  
对markcode进行修改就能看到具体的效果。
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics