精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

今天,我要干掉 if ... else ...

開發(fā) 后端
對于目前的現(xiàn)狀來說,我如果在原有的基礎(chǔ)上來修改,只要稍微注意一下解決需求不是很大的問題,但是說后面可維護(hù)性非常差。

[[394207]]

業(yè)務(wù)背景

近日在公司領(lǐng)到一個小需求,需要對之前已有的試用用戶申請規(guī)則進(jìn)行拓展。我們的場景大概如下所示:

  1. if (是否海外用戶) { 
  2.  return false
  3. if (刷單用戶) { 
  4.   return false
  5. if (未付費(fèi)用戶 && 不再服務(wù)時段) { 
  6.   return false
  7. if (轉(zhuǎn)介紹用戶 || 付費(fèi)用戶 || 內(nèi)推用戶) { 
  8.   return true
  9. else { 
  10.   return false

按照上述的條件我們可以得出的結(jié)論是:

咱們的的主要流程主要是基于 and 或者 or 的關(guān)系。

如果有一個不匹配的話,其實(shí)咱們后續(xù)的流程是不用執(zhí)行的,就是需要具備一個短路的功能。

對于目前的現(xiàn)狀來說,我如果在原有的基礎(chǔ)上來修改,只要稍微注意一下解決需求不是很大的問題,但是說后面可維護(hù)性非常差。

后面進(jìn)過權(quán)衡過后,我還是決定將這個部分進(jìn)行重構(gòu)一下。

規(guī)則執(zhí)行器

針對這個需求,我首先梳理了一下咱們規(guī)則執(zhí)行器大概的設(shè)計(jì), 我們首先需要對規(guī)則進(jìn)行抽象, 然后定義規(guī)則模板,然后通過規(guī)則模板去自己實(shí)現(xiàn)具體的規(guī)則,最后對于規(guī)則中可能會存在共享對象的轉(zhuǎn)換,我們提前在模板方法中定義即可,后期如果需要的話,可以對 DSL 語言或者增加腳本語言解析器,以及反射 class 文件的方式來實(shí)現(xiàn)動態(tài)拓展。

最后我設(shè)計(jì)了一個 V1 版本和大家一起分享一下,如果大家也有這樣的 case 可以給我分享留言,下面部分主要是設(shè)計(jì)和實(shí)現(xiàn)的流程和 code .

規(guī)則執(zhí)行器的設(shè)計(jì)

對于我規(guī)則的執(zhí)行器的設(shè)計(jì),我收到 <<策略模式>> 和 << 規(guī)約模式>> 的啟發(fā)。 在這個場景咱們首先想到的就是將規(guī)則的自然語言轉(zhuǎn)換為程序代碼。在 DDD 設(shè)計(jì)中,我們可以選擇 DSL 方式來處理 Rule 的一種方式;對于業(yè)務(wù)數(shù)據(jù)處理或者其他的復(fù)雜流程,我們可以通過 Rule 模板來進(jìn)行自定義實(shí)現(xiàn)具體的 Rule 策略。

對于規(guī)則執(zhí)行器的處理步驟如下:

  1. 首先需要構(gòu)造業(yè)務(wù)數(shù)據(jù)如用戶基本,用戶狀態(tài),以及一些業(yè)務(wù)數(shù)據(jù);
  2. 然后通過當(dāng)前的上下文,獲取具體規(guī)則列表,這里可以從規(guī)則工廠中獲取;
  3. 然后調(diào)用規(guī)則執(zhí)行方法拿到結(jié)果。
  4. 在執(zhí)行的過程,對鏈接關(guān)系的處理,常用的關(guān)系有 and or not 等

抽象規(guī)則和定義模板

首先需要定義 BaseRule 作為 Rule 的一個抽象,定義 execute 方法為執(zhí)行方法。然后定義 AbstractRule

作為規(guī)則模板,作為一個方法的公共實(shí)現(xiàn),提供拓展點(diǎn) convert 、executeRule 可以用戶轉(zhuǎn)換自定義 RuleDto 數(shù)據(jù)結(jié)構(gòu)。 AddressRule 和 NationalityRule分別做為兩個實(shí)現(xiàn) Rule 的具體策略或者說是具體實(shí)現(xiàn)。

  1. // 業(yè)務(wù)數(shù)據(jù) 
  2. @Data 
  3. public class RuleDto { 
  4.   private String address; 
  5.   private int age; 
  6.  
  7. // 規(guī)則抽象 
  8. public interface BaseRule { 
  9.  
  10.     boolean execute(RuleDto dto); 
  11.  
  12. // 規(guī)則模板 
  13. public abstract class AbstractRule implements BaseRule { 
  14.  
  15.     protected <T> T convert(RuleDto dto) { 
  16.         return (T) dto; 
  17.     } 
  18.  
  19.     @Override 
  20.     public boolean execute(RuleDto dto) { 
  21.         return executeRule(convert(dto)); 
  22.     } 
  23.    
  24.     protected <T> boolean executeRule(T t) { 
  25.         return true
  26.     } 
  27.  
  28. // 具體規(guī)則- 例子1 
  29. public class AddressRule extends AbstractRule { 
  30.  
  31.     @Override 
  32.     public boolean execute(RuleDto dto) { 
  33.         System.out.println("AddressRule invoke!"); 
  34.         if (dto.getAddress().startsWith(MATCH_ADDRESS_START)) { 
  35.             return true
  36.         } 
  37.         return false
  38.     } 
  39.  
  40. // 具體規(guī)則- 例子2 
  41. public class NationalityRule extends AbstractRule { 
  42.  
  43.     @Override 
  44.     protected <T> T convert(RuleDto dto) { 
  45.         NationalityRuleDto nationalityRuleDto = new NationalityRuleDto(); 
  46.         if (dto.getAddress().startsWith(MATCH_ADDRESS_START)) { 
  47.             nationalityRuleDto.setNationality(MATCH_NATIONALITY_START); 
  48.         } 
  49.         return (T) nationalityRuleDto; 
  50.     } 
  51.  
  52.  
  53.     @Override 
  54.     protected <T> boolean executeRule(T t) { 
  55.         System.out.println("NationalityRule invoke!"); 
  56.         NationalityRuleDto nationalityRuleDto = (NationalityRuleDto) t; 
  57.         if (nationalityRuleDto.getNationality().startsWith(MATCH_NATIONALITY_START)) { 
  58.             return true
  59.         } 
  60.         return false
  61.     } 
  62.  
  63. // 常量定義 
  64. public class RuleConstant { 
  65.     public static final String MATCH_ADDRESS_START= "北京"
  66.     public static final String MATCH_NATIONALITY_START= "中國"

規(guī)則執(zhí)行器的核心構(gòu)建

RuleService 是規(guī)則執(zhí)行和規(guī)則管道鏈接的具體類,在這個類里面我們首先提供了一個構(gòu)造器方法 create()可以提供默認(rèn)的初始化過程

  1. // 規(guī)則執(zhí)行器 
  2. public class RuleService { 
  3.  
  4.     private Map<Integer, List<BaseRule>> hashMap = new HashMap<>(); 
  5.     private static final int NOT = 2; 
  6.     private static final int AND = 1; 
  7.     private static final int OR = 0; 
  8.     private RuleDto ruleDto; 
  9.  
  10.     public static RuleService create(RuleDto ruleDto) { 
  11.         RuleService ruleService = new RuleService(); 
  12.         ruleService.ruleDto = ruleDto; 
  13.         return ruleService; 
  14.     } 
  15.  
  16.  
  17.     public RuleService and(List<BaseRule> ruleList) { 
  18.         hashMap.put(AND, ruleList); 
  19.         return this; 
  20.     } 
  21.  
  22.     public RuleService or(List<BaseRule> ruleList) { 
  23.         hashMap.put(OR, ruleList); 
  24.         return this; 
  25.     } 
  26.  
  27.     public RuleService not(List<BaseRule> ruleList) { 
  28.         hashMap.put(NOT, ruleList); 
  29.         return this; 
  30.     } 
  31.  
  32.     public boolean execute() { 
  33.         return this.execute(ruleDto); 
  34.     } 
  35.  
  36.     private boolean execute(RuleDto dto) { 
  37.         for (Map.Entry<Integer, List<BaseRule>> item : hashMap.entrySet()) { 
  38.             List<BaseRule> ruleList = item.getValue(); 
  39.             switch (item.getKey()) { 
  40.                 case AND
  41.                     // 如果是 and 關(guān)系,同步執(zhí)行 
  42.                     System.out.println("execute key = " + 1); 
  43.                     if (!andRule(dto, ruleList)) { 
  44.                         return false
  45.                     } 
  46.                     break; 
  47.                 case OR
  48.                     // 如果是 or 關(guān)系,并行執(zhí)行 
  49.                     System.out.println("execute key = " + 0); 
  50.                     if (!orRule(dto, ruleList)) { 
  51.                         return false
  52.                     } 
  53.                     break; 
  54.                 case NOT
  55.                     // 如果是 not 關(guān)系 
  56.                     System.out.println("execute key = " + 2); 
  57.                     if (!notRule(dto, ruleList)) { 
  58.                         return false
  59.                     } 
  60.                 default
  61.                     break; 
  62.             } 
  63.         } 
  64.         return true
  65.     } 
  66.  
  67.     private boolean andRule(RuleDto dto, List<BaseRule> ruleList) { 
  68.         for (BaseRule rule : ruleList) { 
  69.             boolean execute = rule.execute(dto); 
  70.             if (!execute) { 
  71.                 // and 關(guān)系匹配失敗一次,返回 false 
  72.                 return false
  73.             } 
  74.         } 
  75.         // and 關(guān)系全部匹配成功,返回 true 
  76.         return true
  77.     } 
  78.  
  79.     private boolean orRule(RuleDto dto, List<BaseRule> ruleList) { 
  80.         for (BaseRule rule : ruleList) { 
  81.             boolean execute = rule.execute(dto); 
  82.             if (execute) { 
  83.                 // or 關(guān)系匹配到一個就返回 true 
  84.                 return true
  85.             } 
  86.         } 
  87.         // or 關(guān)系一個都匹配不到就返回 false 
  88.         return false
  89.     } 
  90.  
  91.     private boolean notRule(RuleDto dto, List<BaseRule> ruleList) { 
  92.         // not 規(guī)則內(nèi)部為 and 鏈接 
  93.         return !andRule(dto, ruleList); 
  94.     } 
  95.  
  96. // 規(guī)則工廠類 
  97. public class RuleServices { 
  98.      
  99.     /** 
  100.      * 學(xué)生規(guī)則教研 
  101.      * 
  102.      * @return 
  103.      */ 
  104.     public static RuleService isValidStudent(RuleDto ruleDto) { 
  105.         AgeRule ageRule = new AgeRule(); 
  106.         NameRule nameRule = new NameRule(); 
  107.         NationalityRule nationalityRule = new NationalityRule(); 
  108.         AddressRule addressRule = new AddressRule(); 
  109.         SubjectRule subjectRule = new SubjectRule(); 
  110.         Flag110Rule flag110Rule = new Flag110Rule(); 
  111.  
  112.         return RuleService 
  113.                 .create(ruleDto) 
  114.                 .and(Arrays.asList(nationalityRule, nameRule, addressRule)) 
  115.                 .or(Arrays.asList(ageRule, subjectRule)) 
  116.                 .not(Collections.singletonList(flag110Rule)); 
  117.     } 

客戶端調(diào)用代碼

客戶端調(diào)用主要分為三個步驟:

首先是需要構(gòu)造業(yè)務(wù)數(shù)據(jù),因?yàn)橐?guī)則策略,是基于數(shù)據(jù)處理的。

然后從規(guī)則工廠中,獲取規(guī)則列表后返回規(guī)則定義執(zhí)行器。

最后執(zhí)行規(guī)則,返回結(jié)果。

  1. public class RuleServiceTest { 
  2.  
  3.     @org.junit.Test 
  4.     public void execute() { 
  5.         //規(guī)則執(zhí)行器 
  6.         //優(yōu)點(diǎn):比較簡單,每個規(guī)則可以獨(dú)立,將規(guī)則,數(shù)據(jù),執(zhí)行器拆分出來,調(diào)用方比較規(guī)整 
  7.         //缺點(diǎn):數(shù)據(jù)依賴公共傳輸對象 dto 
  8.  
  9.         //1. 構(gòu)造需要的數(shù)據(jù) create dto 
  10.         RuleDto dto = new RuleDto(); 
  11.         dto.setAge(5); 
  12.         dto.setName("張三"); 
  13.         dto.setAddress("北京"); 
  14.         dto.setSubject("數(shù)學(xué)");; 
  15.  
  16.         //2. 定義規(guī)則  init rule 
  17.         RuleService ruleService = RuleServices.isValidStudent(dto); 
  18.  
  19.         //3. 規(guī)則執(zhí)行 rule execute 
  20.         boolean ruleResult = ruleService.execute(); 
  21.         System.out.println("this student rule execute result :" + ruleResult); 
  22.     } 

總結(jié)

規(guī)則執(zhí)行器的優(yōu)點(diǎn)和缺點(diǎn)

優(yōu)點(diǎn):

  • 比較簡單,每個規(guī)則可以獨(dú)立,將規(guī)則,數(shù)據(jù),執(zhí)行器拆分出來,調(diào)用方比較規(guī)整;
  • 我在 Rule 模板類中定義 convert 方法做參數(shù)的轉(zhuǎn)換這樣可以能夠,為特定 rule 需要的場景數(shù)據(jù)提供拓展。

缺點(diǎn):上下游 rule 有數(shù)據(jù)依賴性,如果直接修改 dto 傳輸對象的值不是特別合理,這種建議采用中間數(shù)據(jù)存儲臨時數(shù)據(jù)。

參考資料

https://www.codenong.com/30430818

 

https://cloud.tencent.com/developer/article/1528935

 

責(zé)任編輯:武曉燕 來源: 運(yùn)維開發(fā)故事
相關(guān)推薦

2021-01-29 07:45:27

if-else代碼數(shù)據(jù)

2020-04-09 08:29:50

編程語言事件驅(qū)動

2020-10-22 09:20:22

SQLNoSQL 數(shù)據(jù)庫

2023-01-19 00:13:28

代碼技術(shù)計(jì)劃

2020-07-09 08:59:52

if else模板Service

2025-04-21 00:00:05

2025-06-26 01:10:00

服務(wù)定位解析器Spring

2019-04-25 14:25:24

Spring Bootif elseJava

2019-03-14 09:18:19

5GWiFi4G

2025-03-12 14:09:56

2019-11-26 10:07:10

業(yè)務(wù)開發(fā)邏輯

2021-10-27 09:10:50

CSS 技巧else

2022-06-14 10:49:33

代碼優(yōu)化Java

2025-03-26 04:00:01

2019-10-22 20:12:22

戴爾

2021-04-27 08:25:52

MVCC數(shù)據(jù)MySQL

2019-10-22 09:11:50

策略業(yè)務(wù)代碼

2012-02-22 10:10:16

2022-08-10 19:28:40

Hadoop數(shù)據(jù)庫

2021-07-12 07:31:22

重構(gòu)軟件行業(yè)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

亚洲资源在线| 中文字幕激情视频| 高清一区二区三区| 久久先锋影音av鲁色资源网| 亚洲 日韩 国产第一| 催眠调教后宫乱淫校园| 香蕉久久aⅴ一区二区三区| 粉嫩绯色av一区二区在线观看 | www成人免费观看| 91在线小视频| 国产精品精品久久久| 短视频在线观看| 日本欧美日韩| 国产精品美女久久久久久| 91影视免费在线观看| 国产第一页在线播放| 最新国产一区| 欧美日本免费一区二区三区| 久久观看最新视频| 日韩欧美亚洲系列| 日本视频免费一区| 欧美久久久精品| 欲求不满的岳中文字幕| 深夜视频一区二区| 一级日本不卡的影视| 久久视频在线观看中文字幕| 这里只有精品9| 精品电影一区| 伊人伊人伊人久久| 一二三级黄色片| av老司机在线观看| 国产精品久久久久久久久免费桃花 | 人妻中文字幕一区| 蜜桃一区二区三区四区| 久久6免费高清热精品| 9.1成人看片| 日韩一区二区三区精品视频第3页| 一区二区三区在线观看国产| 欧美日韩精品免费观看| 精品美女www爽爽爽视频| 99精品视频网| 日韩在线视频观看正片免费网站| 波多野结衣一二三区| 成人精品三级| 精品国产91久久久| japanese在线播放| 成人在线播放视频| 99久久国产综合色|国产精品| 国产三级精品网站| 无码人妻精品一区二区蜜桃色欲| 欧美日韩国产一区精品一区| 国产亚洲成精品久久| 国产xxxx视频| 久久99成人| 色婷婷亚洲综合| 一二三四视频社区在线| 欧美三级黄网| 欧美激情中文不卡| 久久99精品国产一区二区三区| 国产丝袜视频在线观看| 日韩电影一区二区三区| 3344国产精品免费看| 欧美黑人精品一区二区不卡| 国产亚洲第一伦理第一区| 亚洲精品不卡在线| 亚洲成a人片在线www| 成人免费91| 欧美一区二区三区在线观看| 五月天婷婷亚洲| 高潮一区二区| 日韩欧美国产免费播放| 黄色激情在线视频| 鲁鲁在线中文| 五月天欧美精品| 免费看一级大黄情大片| 日韩123区| 亚洲午夜激情av| 日韩 欧美 视频| 黄页在线观看免费| 亚洲一区av在线| 日本福利视频网站| 牛牛精品在线| 亚洲国产成人porn| 五十路熟女丰满大屁股| 天堂中文在线播放| 日本精品一区二区三区高清| 成人精品视频一区二区| 一区二区电影免费观看| 色国产综合视频| 青青草av网站| 免费一级欧美在线观看视频| 在线不卡免费欧美| 中文在线字幕观看| 丝袜美腿一区二区三区动态图| 日韩一区二区三区视频| 国产高潮失禁喷水爽到抽搐| 国产欧美自拍一区| 亚洲欧美日韩一区二区三区在线| 成人免费毛片糖心| 日韩伦理一区二区三区| 国产视频自拍一区| 人妻少妇一区二区| 精品无人区麻豆乱码久久久| 色偷偷噜噜噜亚洲男人| 久久久久久久黄色| 欧美激情麻豆| 欧美诱惑福利视频| 一级黄色a视频| 麻豆精品在线播放| 成人免费视频网站| 韩国三级在线观看久| 亚洲欧美视频在线观看| 男人日女人bb视频| 欧美xnxx| 精品国产精品网麻豆系列 | 亚洲播播91| 欧美精品丝袜中出| 97香蕉碰碰人妻国产欧美 | 人人妻人人澡人人爽久久av| 久久久精品综合| 女同性恋一区二区| 中文一区一区三区高中清不卡免费| 欧美日韩国产综合草草| 国产69视频在线观看| 伊人成综合网yiren22| 中文字幕精品av| 国产精品111| 奇米色777欧美一区二区| 99久久精品久久久久久ai换脸| 手机看片福利在线观看| 最新欧美精品一区二区三区| 欧美午夜小视频| 久久久精品一区二区毛片免费看| 欧美一二三在线| 激情av中文字幕| 欧美gay男男猛男无套| 欧美—级a级欧美特级ar全黄 | a一区二区三区亚洲| 日韩精品高清视频| 国产高潮国产高潮久久久91| 久久先锋资源| 国产手机精品在线| 91caoporn在线| 性久久久久久久久| 国产精品999.| 不卡一区综合视频| 日韩av电影中文字幕| 日本xxxxwww| 国产精品国产a| 国产v片免费观看| 伊人www22综合色| 久久久国产一区二区三区| 精品成人无码久久久久久| 成人av免费观看| 日韩精品一区二区免费| 国产精品美女久久久久| 日韩亚洲欧美中文在线| 亚洲精品国产精品乱码视色| 2021国产精品久久精品| 国产精品亚洲天堂| 久久人人视频| 中文字幕日韩在线观看| 奴色虐av一区二区三区| 91麻豆123| 无码精品a∨在线观看中文| 国产成人久久精品一区二区三区| 亚洲少妇激情视频| 国产一级淫片a视频免费观看| 972aa.com艺术欧美| 成人免费观看cn| 色婷婷久久久| 欧美在线视频网站| 天堂中文在线8| 欧美性xxxxxxx| 麻豆精品免费视频| 国产亚洲午夜| 欧美日韩最好看的视频| 偷拍中文亚洲欧美动漫| 亚洲人成网站999久久久综合| 日韩一级在线视频| 风流少妇一区二区| 17c丨国产丨精品视频| 日韩在线观看一区二区三区| 久久亚洲电影天堂| 青娱乐在线免费视频| 中文子幕无线码一区tr| 一级黄色录像在线观看| 欧美在线播放| 精品综合久久久| 悠悠资源网亚洲青| 一区二区av在线| 中日韩在线观看视频| 国产精品麻豆视频| 一级黄色高清视频| 国产主播一区| 精品免费一区二区三区蜜桃| 三妻四妾的电影电视剧在线观看| 亚洲毛茸茸少妇高潮呻吟| 91丝袜一区二区三区| 国产精品久久久久久户外露出 | 亚洲一区二区三区香蕉| 欧美男男video| 日韩精品中文字幕有码专区| 中文字幕在线播放av| 亚洲午夜免费视频| 中国xxxx性xxxx产国| 美女久久网站| 国产精品波多野结衣| 欧美日韩一区二区三区在线电影 | 欧美老女人另类| 亚洲一区二区久久久久久| 日本黄色免费在线| 日韩在线观看成人| 日本高清视频网站| 在线视频你懂得一区| 男女性高潮免费网站| 成人动漫精品一区二区| www欧美激情| 99av国产精品欲麻豆| 一本一生久久a久久精品综合蜜| 99久久人爽人人添人人澡| 国产精品黄视频| 色呦呦在线看| 色久欧美在线视频观看| 人妻va精品va欧美va| 欧美日韩精品电影| 91视频综合网| 日本一区二区高清| 女性生殖扒开酷刑vk| 蜜臀精品久久久久久蜜臀 | 欧美全黄视频| 午夜免费电影一区在线观看| 国产精品调教| 91久久精品美女高潮| 婷婷电影在线观看| 欧美黑人极品猛少妇色xxxxx| 91激情在线| 亚洲欧美制服丝袜| 人妻精品一区二区三区| 91精品免费观看| 亚洲天堂av片| 亚洲午夜羞羞片| 久久精品亚洲a| 久久美女艺术照精彩视频福利播放| 日韩高清一二三区| 极品美女销魂一区二区三区免费| avav在线播放| 中文在线日韩| 最新欧美日韩亚洲| 残酷重口调教一区二区| 好吊色欧美一区二区三区四区| 久久精品九色| 日韩美女免费线视频| 91制片在线观看| 久久精品成人动漫| 永久av在线| 伊人精品在线观看| 黄色小视频在线免费观看| 精品视频在线播放免| 欧美在线 | 亚洲| 精品欧美乱码久久久久久1区2区| 在线观看亚洲国产| 欧美三电影在线| 亚洲天堂网在线观看视频| 在线观看国产91| 中国精品一区二区| 欧美自拍丝袜亚洲| 欧美日韩a v| 精品污污网站免费看| 一区二区视频免费| 欧美人伦禁忌dvd放荡欲情| 91中文字幕在线视频| 在线播放中文一区| 国内精品久久久久久久久久久 | 国产又粗又长又大的视频| 日本欧美大码aⅴ在线播放| 色多多视频在线播放| 久久99精品久久只有精品| caoporm在线视频| 国产一区二区伦理| 国产精品果冻传媒| 99精品在线免费| 好吊视频在线观看| 中文字幕免费在线观看视频一区| 国产亚洲精品精品精品| 国产精品成人免费精品自在线观看| 在线观看黄网址| 亚洲国产精品久久人人爱蜜臀| 日本一级淫片色费放| 色视频成人在线观看免| 在线播放一级片| 精品噜噜噜噜久久久久久久久试看 | 国产在线不卡av| 97久久超碰国产精品电影| av网站免费在线看| 中文字幕一区二区三区四区不卡| 9999热视频| 精品福利视频导航| 中文在线字幕免费观| 91精品国产手机| 天堂在线观看免费视频| 亚洲一区二区精品| 国产视频第一页在线观看| 精品国产网站地址| 欧美大胆a人体大胆做受| 国产精品啪视频| 视频一区日韩| 欧美系列一区| 欧美久久一级| 日日摸天天爽天天爽视频| 精品无人区卡一卡二卡三乱码免费卡| 成人在线观看一区二区| 国产欧美一区二区精品忘忧草| 三级影片在线看| 日本韩国一区二区| 精品人妻午夜一区二区三区四区 | 欧美xxxx黑人又粗又长密月| 欧美成人精品一区二区三区在线看| 黄色特一级视频| 日韩 欧美一区二区三区| 天堂va欧美va亚洲va老司机| 国产欧美日韩精品在线| 久久久国产精华液| 欧美影视一区在线| 色婷婷av一区二区三| 北条麻妃在线一区二区| 伊人久久精品一区二区三区| 亚洲自拍高清视频网站| 欧洲福利电影| 91国视频在线| 国产精品中文有码| 国产精品1区2区3区4区| 欧美日韩国产中文精品字幕自在自线 | av天堂一区二区三区| 亚洲性xxxx| 多野结衣av一区| 成人欧美一区二区三区在线湿哒哒| 天堂资源在线亚洲| 久久久久久久香蕉| 国内成人免费视频| 国产毛片欧美毛片久久久| 精品免费在线视频| 性生活免费网站| 久久九九免费视频| 成人黄色在线| 日本精品免费| 久久国产精品毛片| 久久人人爽人人人人片| 亚洲免费在线视频| 一级黄色a毛片| 自拍亚洲一区欧美另类| 电影天堂国产精品| 久久精品女人的天堂av| 激情欧美国产欧美| 日本一级大毛片a一| 亚洲蜜臀av乱码久久精品| 91肉色超薄丝袜脚交一区二区| 永久免费看mv网站入口亚洲| 日韩成人动漫| 欧美亚州在线观看| 日韩精品亚洲专区| 高清国产在线观看| 婷婷综合在线观看| 少妇人妻精品一区二区三区| 欧美精品日韩www.p站| 欧美二区观看| 国产一区二区三区播放| 久久er99热精品一区二区| 一本在线免费视频| 欧美艳星brazzers| 成人午夜电影在线观看| 日韩美女写真福利在线观看| 免费黄色成人| 久久久久免费精品| 久久亚洲综合色| 欧美啪啪小视频| 亚洲美女黄色片| 亚洲天堂手机| 久久久影院一区二区三区| 亚洲色诱最新| 成年人网站免费在线观看 | 国产调教在线观看| 精品污污网站免费看| 蜜桃视频在线观看www社区 | 秋霞欧美一区二区三区视频免费| 欧美羞羞免费网站| 午夜视频在线观看免费视频| 亚洲综合在线小说| 亚洲黄色免费| 国产真实乱人偷精品| 一本一道综合狠狠老| 1024国产在线| 97神马电影| 亚洲在线国产日韩欧美| 波多野在线播放| 91麻豆精品国产91久久久久| 欧美人与性禽动交精品| 一本综合精品| 欧美日韩生活片| 日韩亚洲欧美在线|