<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      HarmonyOS 鴻蒙隔離層設(shè)計

      在軟件開發(fā)中,底層庫的更換或升級是常見的需求,這可能由性能提升、新功能需求或安全性考慮等因素驅(qū)動。為了降低遷移成本,良好的設(shè)計模式至關(guān)重要。

      image

      在版本迭代過程中,網(wǎng)絡(luò)請求庫可能會經(jīng)歷從A到B再到C的演進。為了實現(xiàn)業(yè)務(wù)層的無感切換,需要在各個請求庫和業(yè)務(wù)代碼之間封裝隔離代碼,以實現(xiàn)第三方網(wǎng)絡(luò)庫的靈活更換。

      回調(diào)接口 (ICallback)

      定義了ICallback接口,包含onSuccessonFailure兩個方法,用于處理異步操作的成功和失敗情況。

      /**
       * ICallback 接口定義了處理異步操作成功時的回調(diào)邏輯。
       * 這個接口通常用于網(wǎng)絡(luò)請求操作,當操作成功完成時,
       * 通過實現(xiàn)此接口的對象的 onSuccess 方法來處理結(jié)果。
       */
      export interface ICallback {
        /**
         * 當異步操作成功時調(diào)用此方法。
         *
         * @param result 操作結(jié)果的數(shù)據(jù),通常是一個字符串類型,可以是 JSON 格式、XML 格式或其他文本格式。
         *              具體格式取決于異步操作的上下文和需求。
         */
        onSuccess(result: string): void;
        
        /**
         * 當異步操作失敗時調(diào)用此方法。
         *
         * @param error 錯誤信息,提供失敗操作的描述。
         *             這可以是技術(shù)性錯誤(如網(wǎng)絡(luò)問題、解析錯誤等)或業(yè)務(wù)邏輯錯誤。
         */
        onFailure(error: string): void;
      }
      

      HTTP響應(yīng)處理 (HttpCallback)

      HttpCallback類實現(xiàn)了ICallback接口,專門為處理HTTP響應(yīng)結(jié)果設(shè)計。它將響應(yīng)字符串解析為JSON對象,并調(diào)用onParsedSuccess方法來處理解析后的對象。

      import { ICallback } from './ICallback';
      
      /**
       * HttpCallback 類是 ICallback 接口的一個實現(xiàn),專門為處理 HTTP 響應(yīng)結(jié)果設(shè)計。
       * 它定義了一個從 JSON 字符串解析結(jié)果并將其轉(zhuǎn)換為特定類型對象的 onSuccess 方法,
       * 然后通過抽象方法 onParsedSuccess 將對象傳遞給進一步的處理。
       * T 泛型允許開發(fā)者指定他們希望從 JSON 字符串解析得到的類型。
       */
      export abstract class HttpCallback<T> implements ICallback {
        /**
         * 當異步操作成功時調(diào)用此方法。
         * 此方法實現(xiàn)了 ICallback 接口的 onSuccess,將字符串結(jié)果解析為 JSON 對象,
         * 并調(diào)用抽象方法 onParsedSuccess 來處理解析后的對象。
         *
         * @param result 異步操作返回的 JSON 格式的字符串數(shù)據(jù)。
         */
        onSuccess(result: string): void {
          // 將 JSON 格式的字符串結(jié)果解析為一個對象,對象的類型由泛型 T 指定。
          let objResult: T = JSON.parse(result) as T;
          // 將解析后的對象傳遞給抽象方法 onParsedSuccess 進行進一步處理。
          this.onParsedSuccess(objResult);
        }
      
        /**
         * 當異步操作失敗時調(diào)用此方法。
         *
         * @param error 錯誤信息,提供失敗操作的描述。
         *             這可以是技術(shù)性錯誤(如網(wǎng)絡(luò)問題、解析錯誤等)或業(yè)務(wù)邏輯錯誤。
         */
        onFailure(error: string): void {
      
        }
      
        /**
         * 抽象方法,用于處理從 JSON 字符串成功解析后得到的特定類型的對象。
         * 具體的處理邏輯需要在子類中實現(xiàn)。
         *
         * @param objResult 從 JSON 字符串解析得到的特定類型的對象。
         */
        protected abstract onParsedSuccess(objResult: T): void;
      }
      

      HTTP請求處理器接口 (IHttpRequest)

      IHttpRequest接口定義了postget兩個方法,用于發(fā)送POST和GET請求。

      // 引入 ICallback 接口的聲明
      import { ICallback } from './ICallback';
      
      /**
       * IHttpRequest 接口定義了處理 HTTP 請求所需的方法。
       * 該接口包含一個 post 方法,用于發(fā)送 POST 請求到指定的 URL。
       */
      export interface IHttpRequest {
        /**
         * 發(fā)送一個 POST 請求到指定的 URL。
         *
         * @param url 請求的目標 URL 地址。
         * @param params 一個包含請求參數(shù)的 Map 對象,鍵和值都是字符串類型。
         * @param callback 一個回調(diào)函數(shù),用于處理請求完成后的結(jié)果。
         *                 這個回調(diào)函數(shù)遵循 ICallback 接口定義的簽名。
         */
        post(url: string, params: Map<string, string>, callback: ICallback): void;
      
        /**
         * 發(fā)送一個 get 請求到指定的 URL。
         * @param url  這個回調(diào)函數(shù)遵循 ICallback 接口定義的簽名。
         * @param callback 一個回調(diào)函數(shù),用于處理請求完成后的結(jié)果。
         *                 這個回調(diào)函數(shù)遵循 ICallback 接口定義的簽名。
         */
        get(url: string, callback: ICallback): void;
      }
      

      HTTP請求處理 (HttpHelper)

      • HttpHelper類實現(xiàn)了單例模式,用于管理網(wǎng)絡(luò)請求。
      • 提供了init方法來初始化網(wǎng)絡(luò)請求處理器。
      • post和get方法用于發(fā)送POST和GET請求,它們代理到具體的網(wǎng)絡(luò)請求處理器。
      import { ICallback } from './ICallback';
      import { IHttpRequest } from './IHttpRequest';
      /**
       * 代理類,用于網(wǎng)絡(luò)請求管理
       */
      export class HttpHelper implements IHttpRequest {
        /**
         * 存儲 IHttpProcessor 接口的實際實現(xiàn)。
         * 這個屬性由 init 方法設(shè)置,用于指定 HttpHelper 應(yīng)該代理到哪個具體的網(wǎng)絡(luò)請求處理器。
         */
        private static mIHttpProcessor: IHttpRequest;
      
        /**
         * 私有構(gòu)造函數(shù),防止外部直接通過 new 關(guān)鍵字創(chuàng)建實例。
         */
        constructor() {
          // 初始化邏輯可以在這里實現(xiàn)
        }
      
        //單例
        private static instance: HttpHelper;
      
        /**
         * 獲取 HttpHelper 的單例實例。
         * @returns {HttpHelper} HttpHelper 的單例實例。
         */
        public static obtain(): HttpHelper {
          if (!HttpHelper.instance) {
            HttpHelper.instance = new HttpHelper();
          }
          return HttpHelper.instance;
        }
      
        /**
         * 初始化代理類,設(shè)置它應(yīng)該使用的網(wǎng)絡(luò)請求處理器。
         * @param httpProcessor 實現(xiàn) IHttpProcessor 接口的對象。
         */
        public static init(httpProcessor: IHttpRequest): void {
          HttpHelper.mIHttpProcessor = httpProcessor;
        }
      
        /**
         * 發(fā)送一個 POST 請求。
         * 這個方法代理到 mIHttpProcessor 的 post 方法,實現(xiàn)了網(wǎng)絡(luò)請求的功能。
         * @param url 請求的 URL 地址。
         * @param params 包含請求參數(shù)的 Map 對象。
         * @param callback 處理請求結(jié)果的回調(diào)函數(shù)。
         */
        post(url: string, params: Map<string, string>, callback: ICallback): void {
          // 代理到 IHttpProcessor 實例的 post 方法
          HttpHelper.mIHttpProcessor.post(url, params, callback);
        }
      
        /**
         * 發(fā)送一個 get 請求。
         * 這個方法代理到 mIHttpProcessor 的 get 方法,實現(xiàn)了網(wǎng)絡(luò)請求的功能。
         * @param url 請求的 URL 地址。
         * @param callback 處理請求結(jié)果的回調(diào)函數(shù)。
         */
        get(url: string, callback: ICallback): void {
          // 代理到 IHttpProcessor 實例的 get 方法
          HttpHelper.mIHttpProcessor.get(url, callback);
        }
      }
      

      具體的網(wǎng)絡(luò)實現(xiàn) (HttptoolRequest)

      • HttptoolRequest類是IHttpRequest的一個具體實現(xiàn),使用了三方網(wǎng)絡(luò)請求庫(httptool)來發(fā)送網(wǎng)絡(luò)請求。
      • 它實現(xiàn)了post和get方法,用于處理POST和GET請求,并使用回調(diào)來處理響應(yīng)。
      import http from '@ohos.net.http';
      import { HttpManager } from '@xufeng/httptool/src/main/ets/http/HttpManager';
      import { RequestMethod } from '@xufeng/httptool/src/main/ets/http/RequestOptions';
      import { HomePageNewIndexBean } from '@xufeng/httptool/src/main/ets/model/NewsModel';
      import { Tongue } from '../bean/Tongue';
      import { ICallback } from './ICallback';
      import { IHttpRequest } from './IHttpRequest';
      
      /**
       * HttptoolRequest 類實現(xiàn)了 IHttpRequest 接口,用于執(zhí)行網(wǎng)絡(luò) POST 請求。
       * 可以使用第三方 SDK 來處理實際的網(wǎng)絡(luò)請求。
       */
      export class HttptoolRequest implements IHttpRequest {
        /**
         * 發(fā)送一個 POST 請求到指定的 URL,并處理響應(yīng)。
         *
         * @param url 請求的目標 URL 地址。
         * @param params 一個 Map 對象,包含了請求的參數(shù)。
         * @param callback 實現(xiàn) ICallback 接口的回調(diào)函數(shù),用于處理請求完成后的結(jié)果。
         */
        post(url: string, params: Map<string, string>, callback: ICallback): void {
      
          let headers: Record<string, string> = {
            "X-APISpace-Token": 'X-APISpace-Token信息',
            "Content-Type": 'application/x-www-form-urlencoded',
          };
          HttpManager.getInstance().request<string>({
            method: RequestMethod.POST,
            url: url,
            header: headers,
            extraData:params
          }).then((response) => {
            console.log("response:" + JSON.stringify(response))
            callback.onSuccess(JSON.stringify(response))
      
          }).catch((err) => {
            console.log("err:" + JSON.stringify(err))
            callback.onFailure(JSON.stringify(err))
          })
        }
      
        /**
         * 發(fā)送一個 get 請求到指定的 URL,并處理響應(yīng)。
         *
         * @param url 請求的目標 URL 地址。
         * @param params 一個 Map 對象,包含了請求的參數(shù)。
         * @param callback 實現(xiàn) ICallback 接口的回調(diào)函數(shù),用于處理請求完成后的結(jié)果。
         */
        get(url: string, callback: ICallback): void {
          HttpManager.getInstance().request<string>({
            method: RequestMethod.GET,
            url: url
          }).then((response) => {
            console.log("response:" + JSON.stringify(response))
            callback.onSuccess(JSON.stringify(response))
      
          }).catch((err) => {
            console.log("err:" + JSON.stringify(err))
            callback.onFailure(JSON.stringify(err))
          })
        }
      }
      

      業(yè)務(wù)層調(diào)用

      通過HttpHelper初始化使用的三方網(wǎng)絡(luò)請求處理器,并發(fā)送POST請求。

      HttpHelper.init(new HttptoolRequest());
      let postURL: string = 'https://eolink.o.apispace.com/rkl/common/tongue/getTongueList'
      let params: Map<string, string> = new Map<string, string>();
      params.set('pageSize', '5')
      params.set('page', '1')
      HttpHelper.obtain().post(postURL, params, new (class Http extends HttpCallback<Tongue> {
        onParsedSuccess(tongue: Tongue): void {
          console.log("tongue==========" + JSON.stringify(tongue));
        }
      }));
      
      posted @ 2024-04-26 20:38  西北野狼  閱讀(275)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲男人AV天堂午夜在| 一本之道高清乱码少妇| 日韩内射美女人妻一区二区三区| 国产一区二区不卡自拍| 狠狠色婷婷久久综合频道日韩| 内射一区二区三区四区| 99国产精品久久久久久久日本竹| 绯色蜜臀av一区二区不卡| 日韩本精品一区二区三区| 亚洲成a人无码av波多野| 华人在线亚洲欧美精品| 国产精品自在自线免费观看| 波多野结衣高清一区二区三区 | 精品亚洲综合一区二区三区| 亚洲国产精品成人av网| 亚洲av无码牛牛影视在线二区| 欧美亚洲h在线一区二区| 国产综合精品一区二区三区| 久久99精品久久久大学生| 精品久久精品午夜精品久久| 日韩精品亚洲专区在线播放| 国产精品护士| 国产成人女人在线观看| 国产精品亚洲二区在线看| 精品人妻无码一区二区三区性| 久久精品国产男包| 亚洲午夜成人精品电影在线观看| 日本特黄特黄刺激大片| 免费播放一区二区三区| 人妻在线无码一区二区三区| 国产一卡2卡三卡4卡免费网站| 亚洲国产av久久久| 国产gaysexchina男外卖| 久久一日本道色综合久久| 91色老久久精品偷偷性色| 成人午夜激情在线观看| 77777五月色婷婷丁香视频| 一区二区三区激情免费视频| 最新亚洲人成无码WWW| 97久久综合亚洲色hezyo| 国产在线线精品宅男网址|