<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    samtiger


    QQ:418148757
    Name:yangchuan
    數(shù)據(jù)加載中……
    設計模式之職責鏈模式

    設計模式之職責鏈 
     最近,在學習ajax的時候,發(fā)現(xiàn)了一個前后臺傳輸數(shù)據(jù)的好東東:json,通過json字符串我們能很快的將java對象轉(zhuǎn)換成javascript對象,至于json具體是什么東西,可以上他的官方網(wǎng)站去查看一下。這里簡單的介紹一下: json用一對大括號來表示一個對象,并用冒號隔開屬性和值,用逗號分隔多個屬性。表示數(shù)組對象的時候json用一對中括號表示。如下:
       1:json代碼來表示一個對象:   {"name":"楊川","sex":"男","age":26}.
         這就表示了一個人的對象。 它的屬性name = 楊川,性別=男 。年紀 =26歲。
       2:json表示數(shù)組: [1,2,3,{"name":"sam","sex":"man"}].
         這個就是一個數(shù)組,  其實熟悉javascript的人,都應該能看出來 json非常相似于javascript的直接量。比如數(shù)組直接量,對象直接量。
       恩,到這里我簡單介紹一下我要做的事情。是這樣的,我們的javascript可以通過一個eval函數(shù),將json字串轉(zhuǎn)化成它自己的對象,比如上邊的那個對象我們要穿換成 我們的 javascript對象就可以這樣寫
       jsonText = " {'name':'楊川','sex':'男','age':26}"
       var person = eval('('+jsonText+')');  //得到一個javascrip對象
       alert(person.name)  //提示: 楊川。
    所以,我們只要在java服務端將pojo生成一個個的json字符串,在前臺就可以 很簡單的轉(zhuǎn)換為js對象了。為前臺的數(shù)據(jù)使用提供了很大的方便 。
      因此我嘗試寫了這么一個轉(zhuǎn)換工具包,結果,在編寫的時候,發(fā)現(xiàn)職責鏈模式到時很適合這個。就拿來用了。呵呵,當然我下邊的 代碼不一定是唯一的,完善的,如果各位看客有更好的 思路和方法。還請賜教啊。
          好了,言歸正傳了。
      我對職責鏈的理解是這樣的,在處理某些業(yè)務的時候,我們可能會判斷不同的情況去選擇做不同的業(yè)務處理,這樣就可能導致大量的if else語句組出來。導致程序的擴展維護相當困難,就比如我這里轉(zhuǎn)換json的這個例子,我的一個tojson(Object object)函數(shù)。他里邊就要判斷這樣一些情況,如果是一個pojo則返回的字符串首尾加上一對大括號,如果是數(shù)組則首尾加上一對中括號。在處理數(shù)組的時候還要考慮數(shù)組元素是pojo,數(shù)組,集合或其它等情況,當然pojo的屬性對象,也得考慮它是否是一個基本數(shù)據(jù)類,pojo,數(shù)組或其它等情況。下邊看看我的代碼。

    public class JSONArray{
    @SuppressWarnings("unchecked")
     public static String toJson(Collection collection) {
      StringBuffer buffer = new StringBuffer();
      buffer.append("[");
      for (Object object : collection) {
       if (object instanceof Collection) {
        System.out.println(object.toString());
        JsonArray.toJson((Collection) object);
       } else {
        if (object.getClass().isArray()) {
         System.out.println(object.toString());
         JsonArray.toJson((Object[]) object);
        } else {
         if (buffer.length() > 1)
          buffer.append(",");
         buffer.append(JsonObject.toJson(object));
        }
       }
      }
      buffer.append("]");
      return buffer.toString();
     }

     @SuppressWarnings("unchecked")
     public static String toJson(Object[] collection) {

      StringBuffer buffer = new StringBuffer();
      buffer.append("[");
      for (Object object : collection) {
       if (object.getClass().isArray()) {
        System.out.println(object.toString());
        JsonArray.toJson((Object[]) object);
       } else {
        if (object instanceof Collection) {
         System.out.println(object.toString());
         JsonArray.toJson((Object[]) object);
        } else {
         if (buffer.length() > 1)
          buffer.append(",");
         buffer.append(JsonObject.toJson(object));
        }
       }

      }
      buffer.append("]");
      return buffer.toString();
     }

    }
    看看上邊 這段代碼,是不是很多if else語句,試想一下我如果再加入一個HashMap的處理方法進來,我
    是不是要 到上邊 每一個 方法都要加上這個類型的判斷處理呢?哪以后再加 呢 ??是不是很難維護了。
           所以,這個地方我們就應該采用 職責鏈模式來完成這個處理。職責鏈模式會將不同類型的處理提出來單獨放在各自不同的類里去處理。當你傳入的數(shù)據(jù)類型時,它會依次在這些處理類里傳遞,直到找到該類型的處理類為止。

        好 ,先定義一個接口。如下:

    責任鏈接口
    這個例子我們需要把不同數(shù)據(jù)類型提出來做相應處理。簡單的可以分為,純 pojo對象的 處理,數(shù)組的處理,集合的處理:代碼如下:
    純對象的處理

    利用反射,讀出屬性和對應方法,并按json的格式輸出字符串,為了前臺方便轉(zhuǎn)換,這里注意了轉(zhuǎn)義字符的處理。

    2:處理集合類型:
    集合類型的處理
    3:數(shù)組的處理:
    數(shù)組的處理


    4: 責任鏈的 組裝
     1/*
     2* @(#)JSONClient.java
     3* createTime:Apr 22, 2008 8:41:10 AM
     4*/

     5package com.sam.jsontool.util;
     6
     7
     8/**
     9 * @author sam E-mail:ashan8888@163.com
    10 * @version 1.0
    11 */

    12public class JSONTool {
    13    
    14    private static JSONArray array ; 
    15    private static JSONCollection collection;
    16    private static JSONObject obj;
    17    static{
    18        array= new JSONArray(); 
    19        collection = new JSONCollection();
    20        obj = new JSONObject();
    21        collection.addChain(array);
    22        array.addChain(obj);
    23    }

    24    
    25    
    26    public static String toJSON(Object object){        
    27        String result = null;
    28        try {
    29            result = collection.doChain(object);
    30        }
     catch (JSONException e) {
    31            e.printStackTrace();        
    32        }

    33        return result;
    34    }

    35    
    36    
    37}

    38
    5:測認結果:
    簡單的單元測試

    呵呵,現(xiàn)在要是加入HashMap的類型處理 是不是很簡單了,只要加入一個類就可以了

    posted on 2008-04-24 19:45 sam.chuan.yang 閱讀(1318) 評論(0)  編輯  收藏 所屬分類: 23設計模式的理解


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 无码精品人妻一区二区三区免费看| 日韩av无码久久精品免费 | 亚洲高清一区二区三区电影| 男女猛烈激情xx00免费视频| 免费不卡在线观看AV| 免费看少妇作爱视频| 亚洲AV无码久久寂寞少妇| 亚洲欧美国产欧美色欲| 免费91最新地址永久入口 | 亚洲国产一成人久久精品| 亚洲中文字幕无码一去台湾| aa级女人大片喷水视频免费| 亚洲精品动漫免费二区| 国产精一品亚洲二区在线播放| 亚洲成AV人片在WWW| 91青青青国产在观免费影视| 亚洲国产精品成人久久蜜臀 | 成年女人男人免费视频播放| 国产亚洲精久久久久久无码| 亚洲色偷偷综合亚洲av78| 国产成人精品免费久久久久| 亚洲Aⅴ无码一区二区二三区软件 亚洲AⅤ视频一区二区三区 | 亚洲五月午夜免费在线视频| 免费人成视频在线| 久久亚洲精品成人综合| 成人亚洲国产精品久久| 91黑丝国产线观看免费| 亚洲欧洲精品无码AV| 最新亚洲人成无码网站| 国产电影午夜成年免费视频| 亚洲精品美女久久久久99| 真人无码作爱免费视频| 丁香花免费完整高清观看 | 亚洲Av永久无码精品黑人| 亚洲视频免费在线看| 亚洲女久久久噜噜噜熟女| 无人视频在线观看免费播放影院| 青青久在线视频免费观看| 亚洲国产高清视频| a级在线免费观看| 亚洲精品成a人在线观看|