<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設計模式的理解


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


    網站導航:
     
    主站蜘蛛池模板: 成人亚洲网站www在线观看| 一个人看的www在线观看免费| 日产乱码一卡二卡三免费| 亚洲成aⅴ人片在线观| 97久久免费视频| 久久精品国产亚洲AV无码娇色| 久久久久国色av免费看| 亚洲黄色网址在线观看| 免费AA片少妇人AA片直播| 亚洲精品亚洲人成在线播放| 国产精品久久久久久久久久免费| 国产成人精品日本亚洲18图| 麻豆成人精品国产免费| 色一情一乱一伦一视频免费看| 亚洲av手机在线观看| 久草免费福利在线| 久久综合日韩亚洲精品色| 19禁啪啪无遮挡免费网站| 中文字幕精品三区无码亚洲| 国产精品免费一级在线观看| 一个人看的www免费高清| 久久精品国产精品亚洲艾| 国产精品免费观看| 亚洲AV无码AV日韩AV网站| 亚洲一级Av无码毛片久久精品| 国产在线精品一区免费香蕉| 亚洲美女aⅴ久久久91| 日韩高清在线免费看| 一级免费黄色毛片| 亚洲黄色三级视频| 成人免费无码精品国产电影| 国产精品免费看久久久香蕉| 亚洲色图.com| 亚洲阿v天堂在线2017免费| 久草视频在线免费看| 亚洲色大成WWW亚洲女子| 久久伊人亚洲AV无码网站| 中文字幕在线免费| 边摸边脱吃奶边高潮视频免费| 亚洲AV无码一区二区乱孑伦AS| 歪歪漫画在线观看官网免费阅读|