<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
    數據加載中……
    設計模式之職責鏈模式

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

    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的處理方法進來,我
    是不是要 到上邊 每一個 方法都要加上這個類型的判斷處理呢?哪以后再加 呢 ??是不是很難維護了。
           所以,這個地方我們就應該采用 職責鏈模式來完成這個處理。職責鏈模式會將不同類型的處理提出來單獨放在各自不同的類里去處理。當你傳入的數據類型時,它會依次在這些處理類里傳遞,直到找到該類型的處理類為止。

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

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

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

    2:處理集合類型:
    集合類型的處理
    3:數組的處理:
    數組的處理


    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:測認結果:
    簡單的單元測試

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

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


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


    網站導航:
     
    主站蜘蛛池模板: 国产一卡二卡3卡四卡免费| 国产亚洲漂亮白嫩美女在线| 亚洲AV无码乱码国产麻豆穿越 | 久久午夜夜伦鲁鲁片免费无码| 成人自慰女黄网站免费大全| xxxx日本在线播放免费不卡| h片在线观看免费| 2022免费国产精品福利在线| 久久久WWW免费人成精品| 美女被免费网站91色| 99久久99这里只有免费的精品| 一区二区三区无码视频免费福利| 免费萌白酱国产一区二区三区| 最近中文字幕大全免费版在线 | 中文字幕无码亚洲欧洲日韩| 亚洲日韩AV一区二区三区四区| 亚洲欧洲无卡二区视頻| 精品国产日韩亚洲一区91| 色婷婷综合缴情综免费观看| 久久免费视频一区| 野花香高清在线观看视频播放免费 | 亚洲av午夜精品无码专区| 亚洲中文字幕无码爆乳app| 小说专区亚洲春色校园| av成人免费电影| 一级毛片免费观看不卡的| 国产亚洲综合色就色| 亚洲成在人天堂一区二区| 亚洲综合激情另类小说区| 亚洲夂夂婷婷色拍WW47| 免费看一级高潮毛片| 精品视频在线免费观看| 无限动漫网在线观看免费 | 人人玩人人添人人澡免费| 四虎最新永久免费视频| 日韩一级在线播放免费观看| 亚洲精品成人区在线观看| 亚洲第一福利网站| 亚洲高清有码中文字| 国产久爱免费精品视频| 最近2022中文字幕免费视频|