中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

更好的網(wǎng)站制作濟南seo怎么優(yōu)化

更好的網(wǎng)站制作,濟南seo怎么優(yōu)化,做網(wǎng)站賺錢流量,義烏北苑編程網(wǎng)站開發(fā)公司責任鏈模式 請求發(fā)送者和接收者連接成一條鏈,一個對象處理完,交給下一位,沿著鏈傳遞請求,這就是責任鏈模式。 角色 抽象處理者(Handler) 定義了處理請求的方法具體處理者(ContreteHandler&am…

責任鏈模式

請求發(fā)送者和接收者連接成一條鏈,一個對象處理完,交給下一位,沿著鏈傳遞請求,這就是責任鏈模式。

角色

  • 抽象處理者(Handler)
    定義了處理請求的方法
  • 具體處理者(ContreteHandler)
    包含下一個抽象處理者作為成員變量,不同的處理者實現(xiàn)不同的處理邏輯,處理完了就交給下一個

案例

數(shù)據(jù)檢查者

在使用前端給后端傳入的數(shù)據(jù)前,都需要做校驗,比如數(shù)據(jù)完整性校驗等等。一個一個 if-else 寫起來比較麻煩,請使用責任鏈模式優(yōu)化代碼編寫體驗。

工具類

Mapx

import java.util.HashMap;public class Mapx<K, V> extends HashMap<K, V> {public static Mapx init(String key, Object value) {return new Mapx().set(key,value);}public Mapx<K, V> set(K key, V value){this.put(key, value);return this;}
}

Setx

import java.util.HashSet;public class Setx extends HashSet {public static Setx init(Object obj){return new Setx().set(obj);}public Setx set(Object obj){this.add(obj);return this;}
}

Res:REST接口返回格式生成器

import java.util.Map;public class Res {public static Map ok(String msg, int symbol, Object data) {return Mapx.init("code",200).set("symbol",symbol).set("data",data).set("type","ok");}public static Map fail(String msg, int symbol, Object data) {return Mapx.init("code",400).set("symbol",symbol).set("data",data).set("type","fail");}
}

Checker:抽象處理者

import java.util.Map;
import java.util.Set;public interface Checker {public Checker hint(String hint);public Checker symbol(int symbol);public Checker ignore(Object ign);public Map check();public Checker next(Checker nextChecker);}

CompleteChecker:完整性檢查者

import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;public class CompleteChecker implements Checker{private Object suspicion;private String hint;private int symbol;private Set ign;private Checker nextChecker;public CompleteChecker(Object suspicion) {this.suspicion = suspicion;}@Overridepublic Checker hint(String hint) {this.hint = hint;return this;}@Overridepublic Checker symbol(int symbol) {this.symbol = symbol;return this;}@Overridepublic Map check() {String result = this.is_complete(suspicion, ign);if (result!=null){Map data = Mapx.init("field", result);return Res.fail(hint, symbol, data);}if (nextChecker!=null){return nextChecker.check();}return null;}@Overridepublic Checker next(Checker nextChecker) {this.nextChecker = nextChecker;return nextChecker;}public CompleteChecker ignore(Object ign){Set ignx = (Set) ign;this.ign = ignx;return this;}private String is_complete(Object obj, Set<String> ign){if(obj==null){return "Self";}if(ign==null){ign = new HashSet<>();}Field[] fields = obj.getClass().getDeclaredFields();Boolean rs = true;for (Field field : fields) {field.setAccessible(true);Object fieldValue = null;String fieldName = "";Type fieldType = null;try {fieldValue = field.get(obj); //得到屬性值fieldType = field.getGenericType();//得到屬性類型fieldName = field.getName(); // 得到屬性名
//                System.out.println("屬性類型:" + fieldType.getTypeName() + ",屬性名:" + fieldName + ",屬性值:" + fieldValue);} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}if(ign.contains(fieldName)){// System.out.println(fieldName+" 屬性忽略檢測");continue;}if (fieldValue == null || fieldValue.equals("")) {  //只要有一個屬性值不為null 就返回false 表示對象不為null
//                System.out.println("檢測的成員變量中有空值");
//                System.out.println(fieldName + "為空");
//                System.out.println(fieldName + ": " + fieldValue);return fieldName;}// 如果成員是列表if (fieldValue instanceof java.util.List) {if (((List<?>) fieldValue).size()==0){return fieldName;}}}return null;}
}

Main

public class Main {public static void main(String[] args) {User user = new User("小靳", "female", 20,new User("父親","male",50,new User("爺爺", "male", 70, null)));Checker checker = new CompleteChecker(user).ignore(Setx.init("age")).hint("user不完整");checker.next(new CompleteChecker(user.father)).ignore(Setx.init("age")).hint("father不完整").next(new CompleteChecker(user.father.father)).ignore(Setx.init("age")).hint("grandfather不完整");System.out.println("檢測結果: " + checker.check());}
}

Output:

檢測結果: {msg=grandfather不完整, symbol=0, code=400, data={field=father}, type=fail}

當然,我這個案例的代碼實現(xiàn)存在漏洞,user.father為null的時候,user.father.father是取不到的。


責任鏈模式的優(yōu)缺點

優(yōu)點

  • 使得一個對象無需知道是其他哪一個對象處理其請求,對象僅需知道該請求會被處理即可,且鏈式結構由客戶端創(chuàng)建?=>?降低了系統(tǒng)的耦合度
  • 在系統(tǒng)中增加一個新的具體處理者無須修改原有系統(tǒng)源代碼,只需要在客戶端重新建立鏈式結構即可?=>?符合開閉原則

缺點

  • 由于一個請求沒有一個明確地接受者 => 無法保證它一定會被處理
  • 對于較長的職責鏈 => 系統(tǒng)性能有一定影響且不利于調(diào)試
  • 如果建立鏈不當,可能會造成循環(huán)調(diào)用 => 導致系統(tǒng)進入死循環(huán)

應用場景

  • 有多個對象處理同一個請求且無需關心請求的處理對象時誰以及它是如何處理的 => 比如各種審批流程
  • 可以動態(tài)地指定一組對象處理請求,客戶端可以動態(tài)創(chuàng)建職責鏈來處理請求,還可以改變鏈中處理者之間的先后次序 => 比如各種流程定制
http://www.risenshineclean.com/news/5851.html

相關文章:

  • 網(wǎng)站專業(yè)代做哪家好滄州網(wǎng)站seo
  • 優(yōu)秀的手機網(wǎng)站2345手機瀏覽器
  • 房產(chǎn)信息查詢系統(tǒng)官方網(wǎng)站一鍵建站
  • 遼寧做網(wǎng)站的公司網(wǎng)站外包公司有哪些
  • 如何做webgis網(wǎng)站優(yōu)化關鍵詞是什么意思
  • 網(wǎng)站排名優(yōu)化服務商全網(wǎng)營銷平臺
  • 網(wǎng)站默認樣式表愛站網(wǎng)seo
  • 做招商網(wǎng)站百度關鍵詞seo
  • 做視頻網(wǎng)站視頻文件都存放在哪里網(wǎng)絡優(yōu)化工程師工作內(nèi)容
  • wordpress 頁面全屏優(yōu)化設計
  • 用vb做網(wǎng)站seo挖關鍵詞
  • 科技資訊網(wǎng)站有哪些seo優(yōu)化的內(nèi)容有哪些
  • 做淘寶推廣開網(wǎng)站合適近期的新聞消息
  • 北京市工程建設信息網(wǎng)官網(wǎng)寧波網(wǎng)站推廣優(yōu)化哪家正規(guī)
  • 江蘇網(wǎng)站建設網(wǎng)絡公司百度愛采購官網(wǎng)
  • 一個外貿(mào)網(wǎng)站要多大的空間比較好建網(wǎng)站要多少錢
  • 無錫做網(wǎng)站seo湘潭關鍵詞優(yōu)化服務
  • 做仿站如何獲取網(wǎng)站源碼百度競價推廣托管
  • 廣州官方網(wǎng)站建設百度競價品牌廣告
  • 百度網(wǎng)站是用什么軟件做的網(wǎng)絡營銷方法有什么
  • 常用wap網(wǎng)站開發(fā)工具 手機網(wǎng)站制如何優(yōu)化企業(yè)網(wǎng)站
  • 如何查詢網(wǎng)站建站時間百度seo優(yōu)化哪家好
  • 做網(wǎng)站東莞太原網(wǎng)站建設優(yōu)化
  • 網(wǎng)站建設哪些公司推廣軟文范文800字
  • 上海人力資源網(wǎng)官方網(wǎng)知乎seo優(yōu)化
  • 如何做網(wǎng)站賺錢6快速seo關鍵詞優(yōu)化方案
  • 怎么做營銷網(wǎng)站推廣搜索引擎優(yōu)化的實驗結果分析
  • 紀檢監(jiān)察工作 網(wǎng)站建設軟文寫作營銷
  • 做58同城網(wǎng)站需要多少錢企業(yè)網(wǎng)站seo排名優(yōu)化
  • 中國建設銀行陜西分行官方網(wǎng)站騰訊云域名注冊