久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網運營的一線實戰(zhàn)洞察。

C++工廠方法模式深度解析:從分支重構到智能指針實踐

C++工廠方法模式深度解析:從分支重構到智能指針實踐 寫這篇的時候其實我猶豫了一下要不要再寫設計模式。市面上講工廠模式的文章一抓一大把從GOF的經典定義到各種C重造輪子的博客實在不算新鮮。但我在實際項目里審了幾年代碼發(fā)現(xiàn)一個挺有意思的現(xiàn)象真正把工廠方法用對、用到位的人不多大多數(shù)人只是背了個概念甚至把簡單工廠和工廠方法混為一談。很多人一上來就在基類構造函數(shù)里調虛函數(shù)——這是C特有的坑后面我會專門講。所以這篇不打算從頭抄一遍GOF的UML圖而是想從“你在代碼里感受到了什么痛點自然而然走到這個模式門前”的角度來聊。先說明白這個模式到底解決了哪類問題再手把手帶著把代碼寫出來然后講幾個很容易踩碎的細節(jié)最后聊聊現(xiàn)在C新標準下這個經典模式有什么新的表達方式。1. 判定需求膨脹的代碼壞味道switch-case和if-else的重災區(qū)很多模式不是“設計”出來的是被逼出來的。工廠方法最典型的出現(xiàn)場景是代碼里開始出現(xiàn)大量根據(jù)類型標記分支的邏輯而且這些邏輯還在不斷增長。1.1 一個很現(xiàn)實的例子模擬對象創(chuàng)建器假設你在寫一個性能分析工具需要把各個監(jiān)控指標對應的模擬對象創(chuàng)建出來。一開始只有CPU和內存兩個指標代碼很清爽// 粗暴但清晰的第一版 std::shared_ptrSimObject CreateSimulator(const std::string type) { if (type CPU) { return std::make_sharedCpuSimulator(); } if (type MEM) { return std::make_sharedMemSimulator(); } return nullptr; }加個判斷多簡單但是項目永遠是活的。第二周加了磁盤IO第三周加了網絡流量第四周銷售那邊提了個新需求說模擬場景里要包含一組容器化的指標對象。于是函數(shù)開始變長if (type DISK) { ... } if (type NET) { ... } if (type CONTAINER) { return std::make_sharedContainerGroupSimulator(); }每個新增的類型都會讓這個函數(shù)多兩三行??粗€行但問題不在于這個函數(shù)本身而在于使用這個創(chuàng)建函數(shù)的每個地方幾乎也都有一套對應的分支邏輯。比如初始化模擬對象參數(shù)的地方if (type CPU) { params.SetCpuQuota(...); } else if (type MEM) { params.SetMemLimit(...); }配置加載的地方再判斷一次if (type CPU) { config.RegisterMetric(cycles); } else if (type DISK) { config.RegisterMetric(io_wait); }你發(fā)現(xiàn)沒有創(chuàng)建邏輯和類型分支像癌細胞一樣擴散到了調用方的各個環(huán)節(jié)。每次新增一個模擬對象不是改一處而是到處打補丁。這時候你會產生一種典型的“代碼壞味”感受我什么都沒干我只是想加點功能為什么要把以前寫的東西全都翻出來改一遍這就是需求膨脹到一定階段后很典型的“開放-封閉原則”失效場景。所謂面向修改開放、面向擴展封閉在最初的簡單代碼里只是一個美好愿望而分支點在不斷累積的時候就是該考慮系統(tǒng)收斂一下對象創(chuàng)建這件事了。1.2 層層疊疊的分支邏輯為什么讓大家痛苦再往深了說這套分支邏輯真正讓人難受的點有三個一是邏輯重復。每個調用點都要判斷類型標記同樣的判斷字符串散落在各處一旦命名規(guī)范變了比如把“MEM”改為“MEMORY”你得全局搜索替換稍不留神就有遺漏。二是耦合點太密。模塊A在創(chuàng)建對象模塊B在用對象模塊C在配置對象一旦鏈條底層的模擬對象構造簽名改了所有分支里的調用代碼都要跟著改。三是測試成本高。想單測一個新增的模擬對象你得先把主分支函數(shù)跑起來但主分支函數(shù)本身就承擔了所有類型的分發(fā)根本沒法單獨測。而且一旦設計出多處分支結構你還會發(fā)現(xiàn)一個更麻煩的事分支之外的公共流程被夾碎了。比如每個模擬對象創(chuàng)建完都要經過初始化、綁定數(shù)據(jù)源、注冊到管理器這套“公共骨架”被散落在分支之間難以抽取復用。感性的描述說了這么多其實核心已經浮出來了我們真正想做的就是讓每類對象知道自己該怎么被創(chuàng)建并且在新增類型時不再回頭修改舊代碼。2. 工廠方法模式的核心本質推遲實例化到子類好了上面這些痛點如果你也經歷過那你其實已經準備好理解這個模式了。工廠方法模式不是一組稀奇古怪的類名堆砌它的本質只有一句話定義一個創(chuàng)建對象的接口讓子類決定實例化哪一個類。2.1 把“創(chuàng)建一個對象”也當成一門產品來做先看兩個最核心的概念Product產品和 Creator創(chuàng)建者。Product是“產品”的統(tǒng)稱在實際代碼里就是那個所有具體對象都要實現(xiàn)的抽象基類或協(xié)議接口。Creator是“創(chuàng)建者”它本身并不關心你到底要生產哪個具體產品它只定義了創(chuàng)建產品時需要的那幾步公共骨架其中有一部關鍵動作是“請求一個產品實例”這個關鍵動作就叫工廠方法Factory Method。粗看會覺得它很簡單因為GOF原書里給的類圖看起來就是兩個層級——一個Product層級一個Creator層級。但真正值得琢磨的是C實現(xiàn)里那個“生產得到的到底是啥”的問題因為工廠方法返回類型恰恰是C里看上去簡單、卻很容易搞錯重點的地方。2.2 C中為什么基類指針/引用至關重要在C里談工廠方法有一個必須首先牢固建立的概念工廠方法返回的必須是一個抽象類型基類指針或引用而絕不能是具體類型。這不是什么風格偏好而是C的靜態(tài)類型系統(tǒng)所決定的。比如方法簽名寫著std::shared_ptrSimObject Create(const std::string type)里面的SimObject就是咱們的抽象基類。這樣子類覆蓋工廠方法時返回的才可能是CpuSimulator、MemSimulator這樣的具體產品。調用方只和基類接口打交道具體類型在編譯期被“抹掉”了這就是多態(tài)在創(chuàng)建層面的體現(xiàn)。反過來想如果工廠方法直接返回具體類型比如CpuSimulator*那你創(chuàng)建函數(shù)就得為每個具體類型寫一個重載調用方的分支判斷還會變成編譯期的類型選擇一套組合拳下來代碼反而比一開始更擰巴。所以記住一個C特有結論工廠方法模式的前提是能在運行時拿到基類指針而用它去調用虛函數(shù)時調用的是具體型號的方法。不在這個前提下談工廠方法等于建了一棟沒有承重墻的房子。3. 手寫一套工廠方法的完整骨架一個C示例的逐步推導光講概念沒有用這里咱們直接從一個“波形生成器”的示例開始完整過一遍代碼的演進。之所以用波形生成器是因為它足夠簡單又能體現(xiàn)“不同產品不同參數(shù)”的特點非常適合做案例。3.1 從Product到Creator的代碼推導先定義產品抽象。#include memory #include string #include vector // 產品基類所有波形生成器都遵循這個接口 class WaveGenerator { public: virtual ~WaveGenerator() default; // 每種波形生成器都會生成自己的采樣點序列 virtual std::vectordouble Generate(int sampleCount) const 0; // 每種波形都有自己的標識名方便調試和序列化 virtual std::string GetName() const 0; };然后是幾個具體產品class SineWaveGenerator final : public WaveGenerator { public: std::vectordouble Generate(int sampleCount) const override { std::vectordouble data; data.reserve(sampleCount); for (int i 0; i sampleCount; i) { data.push_back(std::sin(2.0 * 3.141592653589793 * i / sampleCount)); } return data; } std::string GetName() const override { return sine; } }; class SquareWaveGenerator final : public WaveGenerator { public: std::vectordouble Generate(int sampleCount) const override { std::vectordouble data; data.reserve(sampleCount); for (int i 0; i sampleCount; i) { double t static_castdouble(i) / sampleCount; data.push_back(t 0.5 ? 1.0 : -1.0); } return data; } std::string GetName() const override { return square; } };好現(xiàn)在產品有了。接下來定義Creator。注意這里的關鍵是Creator不是負責具體分發(fā)的那一個它只負責提供一個可以覆蓋的“生產入口”class WaveFactory { public: virtual ~WaveFactory() default; // 工廠方法子類決定返回哪種具體產品 virtual std::unique_ptrWaveGenerator CreateWave() const 0; // 一個使用了工廠方法的公共流程 // 不管子類生產的是正弦波還是方波公共流程都是一樣的 void GenerateAndPrint(int sampleCount) const { auto wave CreateWave(); auto samples wave-Generate(sampleCount); std::cout Generated wave-GetName() with samples.size() samples: std::endl; for (double v : samples) { std::cout v ; } std::cout std::endl; } };然后在具體工廠里各自決定自己生產什么class SineWaveFactory final : public WaveFactory { public: std::unique_ptrWaveGenerator CreateWave() const override { return std::make_uniqueSineWaveGenerator(); } }; class SquareWaveFactory final : public WaveFactory { public: std::unique_ptrWaveGenerator CreateWave() const override { return std::make_uniqueSquareWaveGenerator(); } };到這一步我估計有經驗的開發(fā)者已經發(fā)現(xiàn)了這個“工廠”和常見的“把type字符串丟進去返回對應對象”的那種寫法不太一樣。它沒有if分支甚至沒有一個集中式的分發(fā)邏輯。是的這就是工廠方法模式和簡單工廠的核心差別返回什么東西這件事被下放到了子類里而不是保留在一個集中函數(shù)里。3.2 調用方式與動態(tài)類型識別的小技巧調用方式倒是很簡單int main() { SineWaveFactory sineFactory; sineFactory.GenerateAndPrint(16); SquareWaveFactory squareFactory; squareFactory.GenerateAndPrint(16); }這個輸出會展示正弦波和方波各自的采樣數(shù)據(jù)。很多初學C的同學會糾結一個問題CreateWave返回的是unique_ptrWaveGenerator那我怎么知道它底層到底是一個正弦波還是方波這個問題得分兩說。如果產品接口設計得足夠完善調用方壓根不需要關心具體類型只需要對著基類接口操作。如果你真的有必要知道具體類型——比如要下發(fā)給不同處理鏈路的模塊——那么應當走到工廠方法之外去思考設計問題產品的職責邊界是不是沒劃分干凈是否所有波形生成器都真的適合跑在同一個抽象下這種情況通常意味著接口里缺少一個能區(qū)分行為差異的虛函數(shù)。還有一個細節(jié)在工廠方法里返回unique_ptr和返回shared_ptr其實是兩種不同的語義選擇。前者表示創(chuàng)建者并不共享對象所有權誰調用誰獨占后者表示這個產物可能被多個持有者同時引用。實際項目里如果產品的生命周期和調用方深度綁定unique_ptr更合適因為可以避免無謂的引用計數(shù)開銷如果產品將來會被多個模塊共享shared_ptr才是合理選擇。3.3 關鍵“為什么”公共流程代碼如何復用現(xiàn)在再回頭看WaveFactory::GenerateAndPrint你會發(fā)現(xiàn)它其實是個模版方法Template Method的影子。工廠方法模式通常和模版方法配合使用——基類定義完整流程把其中一個步驟創(chuàng)建產品延遲到子類實現(xiàn)。這樣每個子類雖然工廠方法內容不同但上層流程完全一致。很多人忽略了這個配合關系只盯著工廠方法本身導致寫出來的代碼仍然是“每個子類重復一套公共流程”。而 C 里復用公共流程最自然的方式就是把這個流程放在基類非虛函數(shù)中需要變化的那一步調用純虛函數(shù)。這個組合設計能讓代碼的復用程度顯著提升也是我想強調的一個比較實用的技巧。4. 怎么比“C默認行為”多做一步返回類型拷貝問題的避坑手冊這部分是C里最容易把人繞暈的地方我單獨拿出來展開說。因為工廠方法涉及返回一個對象而這個對象需要穿過函數(shù)返回值這道“邊界”。4.1 為什么基類返回類型不能直接返回具體對象如果直接寫WaveGenerator CreateWave() const; // 錯那你的產品對象在返回的瞬間就會被切片slicing。所謂切片就是子類對象按基類類型的值返回時編譯器會構造一個WaveGenerator臨時對象而子類部分的數(shù)據(jù)被丟棄。這在靜態(tài)類型語言里是很容易犯的低級錯誤尤其對于從Java轉C的開發(fā)者來說因為Java里一切引用本質上都是指針語義不會有這種問題。C的正確做法前面已經寫過了返回指針或引用。引用返回有個生命周期風險工廠方法一般返回本地的局部對象如果返回引用就會變成一個懸空引用。所以現(xiàn)代C里最安全的默認選擇就是返回unique_ptr或者shared_ptr。4.2 基類必須聲明虛析構函數(shù)原因和解決辦法這個其實是老生常談但它在工廠方法里有個特別致命的場景值得單獨強調。想想看你從工廠方法里拿到了一個unique_ptrWaveGenerator底層實際是SineWaveGenerator。在銷毀這個對象時unique_ptrWaveGenerator的析構函數(shù)會調用WaveGenerator的析構函數(shù)。如果WaveGenerator的析構函數(shù)不是虛函數(shù)那它就不會再去調用SineWaveGenerator的析構函數(shù)于是子類里持有的資源可能不會被釋放。在波形生成器這種簡單場景里可能問題不大但如果子類持有文件句柄、網絡連接或者自己分配的大塊緩沖這個問題就立刻變成內存泄漏。解決辦法也很簡單在產品基類的析構函數(shù)前面加個virtualvirtual ~WaveGenerator() default;一定要記住沒有虛析構函數(shù)的基類就不能被作為工廠方法的返回類型來用。這不是風格問題是安全底線。4.3 構造函數(shù)里調用工廠方法C虛調用的致命坑這里插一個我在真實代碼評審里見過的經典錯誤。有一位同事在一個模擬器框架里把工廠方法的調用放在基類的構造函數(shù)里期望在構造基類時就能動態(tài)創(chuàng)建出具體的產品。結果程序運行后產品永遠是一個“空殼”類型的實例。這個問題的根因在C的構造順序里在基類構造函數(shù)執(zhí)行期間虛函數(shù)表指向的仍然是基類的虛函數(shù)版本。也就是說C的虛函數(shù)多態(tài)機制在構造期間還沒有完全生效。你在構造函數(shù)里調用CreateWave()即使它被聲明為虛函數(shù)當前調用的仍然只會是WaveFactory::CreateWave()—— 而基類里那個純虛函數(shù)根本沒法被調用能編譯運行純粹是因為某些寫法兜住了但行為完全不對。正確做法是不要在構造函數(shù)里調用虛函數(shù)。把創(chuàng)建動作移動到獨立的方法里讓它在對象完全構造成功后再被觸發(fā)。這也是工廠方法存在于“創(chuàng)建對象”這個語境下的一個側面提醒——它適合在產品對象已經被完整構造之后對某個接口發(fā)起“生產”請求而不是在構造過程中自找麻煩。5. 三種容易混淆的工廠形態(tài)簡單工廠、工廠方法、抽象工廠的實際選擇很多人把“工廠”這個詞當作一個萬能藥遇到創(chuàng)建邏輯有點復雜就往工廠里套。其實光C社區(qū)里就至少流傳著三種不一樣工廠形態(tài)把它們區(qū)分清楚在做設計決策時會有幫助。5.1 三個形態(tài)的本質對比先看簡單工廠它的特征是有一個集中的CreateXxx靜態(tài)函數(shù)接收一個參數(shù)然后根據(jù)參數(shù)開關分發(fā)到不同的具體構造函數(shù)。這個不算GOF里的經典模式而是一種編碼慣例但它最常見幾乎所有做C的人都會先寫這個。再看工廠方法就是前面一直在講的它把創(chuàng)建動作定義在基類里具體生產交給子類。最后是抽象工廠它不是一兩個類而是一整套產品族創(chuàng)建接口。比如圖形界面庫里你有一個“Windows風格工廠”能同時創(chuàng)建按鈕、文本框、滾動條還有一個“Linux風格工廠”也創(chuàng)建同簽名的三個控件只是每個控件的實現(xiàn)完全不同。這里的核心是產品族之間的配套一致性。它們三者的關系我習慣用一個表格來總結形態(tài)創(chuàng)建入口核心特點適用場景簡單工廠集中式靜態(tài)函數(shù)靠條件分支創(chuàng)建產品擴展需改原函數(shù)產品類型少、變化不頻繁的小項目工廠方法基類虛函數(shù)子類實現(xiàn)每個子類決定自己的產品符合封閉/開放原則產品種類會持續(xù)擴展創(chuàng)建流程相對統(tǒng)一抽象工廠一組創(chuàng)建接口按產品族實現(xiàn)保證產品族內部一致性復雜度和靈活度都高多套風格/系列的產品同時存在啟動時選一整套5.2 實際項目里如何選擇別為設計而設計我的經驗是不要一上來就抽象工廠大部分項目用到工廠方法就夠了。如果一個系統(tǒng)只需要支持兩三種固定的產品類型簡單工廠反而更直接——你不需要建立那么多繼承關系也不需要一個虛函數(shù)表跳來跳去。但一旦你預見到“產品類型每周都可能增加一類”而且每一類的創(chuàng)建方式都有其特殊性那簡單工廠的分支就會開始膨脹。這時切換到工廠方法新增類型只需要新增一個產品類和對應的工廠子類老代碼一行不動。另外的一個參考指標是看創(chuàng)建流程的骨架是否穩(wěn)定。如果創(chuàng)建一個對象總是要經過“解析配置—構造內部組件—綁定外部依賴—注冊回調”這幾步而具體每一步各家不同那么工廠方法配合模版方法結構就非常合適。如果連流程骨架本身都不穩(wěn)定每個產品類型的生命周期和管理方式都大相徑庭那再用工廠硬套只會讓代碼更擰巴——這時候可以直接在更高層級用一個注冊表 委托函數(shù)的路子了。6. C工程里的實際擴展注冊表工廠和lambda工廠傳統(tǒng)工廠方法模式是依賴繼承來解決問題的但在現(xiàn)代C里工程上還有兩種很常見的變體注冊表工廠和lambda工廠。它們不是設計模式的新概念而是利用語言特性對工廠方法模式的適配。6.1 注冊表工廠用映射表替代一大堆子類如果你有幾十種產品為每一個產品都寫一個工廠子類會顯得特別冗余。這時用一個注冊表把字符串和std::function映射起來能讓代碼干凈得多#include functional #include unordered_map class WaveRegistry { public: using FactoryFn std::functionstd::unique_ptrWaveGenerator(); void Register(const std::string name, FactoryFn fn) { factories_[name] std::move(fn); } std::unique_ptrWaveGenerator Create(const std::string name) const { auto it factories_.find(name); if (it factories_.end()) { return nullptr; } return it-second(); } private: std::unordered_mapstd::string, FactoryFn factories_; };然后你就可以在某個模塊初始化時把具體創(chuàng)建函數(shù)注冊進去WaveRegistry registry; registry.Register(sine, []() - std::unique_ptrWaveGenerator { return std::make_uniqueSineWaveGenerator(); }); registry.Register(square, []() - std::unique_ptrWaveGenerator { return std::make_uniqueSquareWaveGenerator(); });調用側只需要知道名稱完全不接觸任何具體工廠類。這種方式對插件化、動態(tài)加載特別友好因為每個插件只需要把自己支持的類型注冊進去就行不需要改主程序里的任何分發(fā)邏輯。在實際工程里這是我在處理“產品類型非常多”時最常用的方式。6.2 lambda工廠的簡潔邊界還有一種更輕量的用法就是干脆不建工廠類直接在需要創(chuàng)建產品的地方用lambda寫一個創(chuàng)建函數(shù)。這個方式適合那種“只在一個地方創(chuàng)建、其他地方不關心”的場景——比如某個服務內部構建自己的依賴組件時直接寫個lambda作為默認工廠即可。lambda工廠的邊界在于它不適合“工廠本身需要復用”的場景也不適合產品創(chuàng)建流程較長、需要子類共享骨架的場景。如果創(chuàng)建邏輯只有兩三行而且不會在第二處復用我支持你用lambda一旦創(chuàng)建過程超過十行或者你發(fā)現(xiàn)這個lambda要在三個以上地方被調用那就該冷靜下來把它升格為真正的類或注冊表條目。7. 現(xiàn)代C語境下的工廠方法演進智能指針與移動語義的配合C已經從裸指針時代走過來了工廠方法模式也搭上了新特性的快車。最明顯的變化是返回值的所有權語義被大大強化。7.1 從裸指針到unique_ptr/shared_ptr的變遷老式的C工廠方法通常返回一個裸指針注釋里寫著“調用者負責delete”。這套約定在現(xiàn)代C里已經基本被淘汰原因很簡單所有權不明確容易漏刪也難以表達是獨占還是共享?,F(xiàn)在的主流寫法是以std::unique_ptr或std::shared_ptr作為返回類型。unique_ptr表示明確的獨占所有權移動語義讓返回值在函數(shù)間傳遞幾乎零開銷shared_ptr則適用于產品會被多個模塊共享的場景。一個小貼士在C14/17里如果產品類型繼承自enable_shared_from_this那么建議直接用shared_ptr作為工廠返回類型否則后續(xù)再轉成shared_ptr時容易遇到所有權割裂的問題。7.2 移動語義和完美轉發(fā)對工廠方法的影響移動語義讓工廠方法里構造產品對象的開銷進一步下降。比如產品內部持有很大的緩沖區(qū)C11之前可能需要拷貝整個緩沖區(qū)現(xiàn)在直接移動即可std::unique_ptrBufferGenerator CreateBufferGenerator(std::vectordouble data) { auto gen std::make_uniqueBufferGenerator(); gen-SetData(std::move(data)); // 不再拷貝 return gen; }完美轉發(fā)則讓工廠方法可以接受任意參數(shù)并原樣轉發(fā)給構造函數(shù)。這在有些復雜產品初始化時很方便template typename... Args std::unique_ptrWaveGenerator CreateWrapped(Args... args) { return std::make_uniqueSineWaveGenerator(std::forwardArgs(args)...); }但要留意一下編譯器的模板理解和報錯信息C模板報錯自古就繞。對這種代碼重要建議是給工廠方法加上概念約束(concepts)或至少在注釋里寫清楚參數(shù)含義否則三個月后你自己都會忘記這些Args該怎么傳。7.3 C20/23的新工具讓工廠方法更健壯在C20和C23里我比較關注兩個特性在工廠方法上的應用。一個是concepts可以用它來約束產品類型必須繼承自WaveGenerator在編譯期就攔截不匹配的類型template DerivedFromWaveGenerator T std::unique_ptrWaveGenerator CreateAsWave() { return std::make_uniqueT(); }另一個是std::expected或std::optional它們讓工廠方法的“創(chuàng)建失敗”語義更清晰。比如注冊表工廠里找不到對應類型時以前返回nullptr調用方還得判空現(xiàn)在可以把錯誤原因一道返回。雖然會增加一點模板復雜度但對大型項目頗有幫助。8. 測試與調試心得工廠方法在實踐里的隱藏價值最后這部分說說工廠方法給測試和調試帶來的便利以及在真實項目中它的另一個“隱形好處”。8.1 便于單元測試的依賴注入點如果你的所有模擬對象都通過工廠方法創(chuàng)建那么在測試時你可以輕易地替換掉整個產品子樹。比如你要測GenerateAndPrint這個公共流程不需要真的創(chuàng)建正弦波只要用一個測試專用的假工廠讓它返回一個記錄型的假產品就足夠了。生產代碼和測試代碼之間通過工廠接口對接耦合度控制得很好。這也解釋了為什么很多優(yōu)秀的C測試框架里mock對象幾乎都依賴工廠或抽象接口——因為只有基于接口編程才能在運行時替換依賴。8.2 一個調試排錯的具體案例詭異的產品類型錯亂有一次我在調試一套渲染引擎發(fā)現(xiàn)場景中的某個物體偶爾會表現(xiàn)出完全不屬于自己類型的渲染行為。排查了很久最后定位到是工廠方法里返回了錯誤的類型轉換。當時的代碼類似于return std::make_sharedSomeDerived(...);但由于基類的工廠方法簽名是返回基類類型而子類的工廠方法里寫了一塊不正確的類型轉換邏輯導致運行時拿到的是一個類型不匹配的實例。這類問題如果不用工廠模式而直接在各調用方創(chuàng)建對象往往會被埋得更深。工廠方法把“創(chuàng)建”這一層面統(tǒng)一收口后定位起來反而容易很多。8.3 工廠方法模式給你帶來的全局視角我自己覺得工廠方法模式真正的價值在于它強迫你把“創(chuàng)建”這件事當成一個完整的、可擴展的關卡。每一個產品不再是散落在系統(tǒng)各處的new或者make_unique而是有明確入口、有明確職責、有明確測試點的組件。這會讓整個系統(tǒng)的結構邊界清晰起來——無論你是自己維護一個中等規(guī)模的項目還是在團隊里協(xié)作這種邊界感對降低維護成本的作用遠超模式本身。9. 最后再分享一個經驗從簡單工廠到工廠方法的平滑重構路徑如果你現(xiàn)在的代碼還是一個簡單的集中式CreateByType函數(shù)別急著推倒重來平滑重構路徑很關鍵。第一步先把創(chuàng)建入口修正為返回std::unique_ptrWaveGenerator而不是裸指針——這是所有權語義的明確化。第二步把函數(shù)改造成基類的虛函數(shù)讓每個分支對應一個子類。這一步不需要一次做完可以先讓最常用的幾個類型走子類路線其他類型仍保留在基類里做兜底。第三步逐步把“按類型分發(fā)”的邏輯從調用方中移除讓所有調用方只看基類接口不再關心具體類型。最后再考慮是否引入注冊表或lambda工廠判斷標準是子類數(shù)量是否多到了寫起來很累的程度。這樣重構的好處是每一步都是可編譯、可測試的不會出現(xiàn)推倒重來的大跨度失敗。我一直覺得設計模式不是拿來炫耀詞匯量的而是拿來讓明天的自己少掉點頭發(fā)的。如果你手頭正有一個分支發(fā)散得很難受的創(chuàng)建邏輯不妨試試這個路徑。寫完最后一行你多半會跟我一樣覺得那點重構的功夫真值。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日韩无码AB| 97网址97| 欧美日韩激情无码专区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 国产精品久久久久久久黄无码| 舔人妻中文免费视频| 97欧美精品综合| 色情五月丁香| 99久久久99久久91熟女| 性开放中文AV高清无码免费看| 日本媚薬中文字幕在线| 91AV入口| 国产精品人妻一区二区| 欧美少妇色图| 少妇久久久| 久操频道免费在线呗看| 91热热色| 国产三级片在线观看| 无码人妻精品一区二区三区九九| 97干色天堂| 夜夜一区二区| 欧美乱色| 成人精品电影| 久久久久久久国产| 精品九九九九九九九| 国产精品久久久亚洲一区| 婷婷激情综合网| 久久九九国产精品| 日韩av不卡在线观看| 91成人在线免费视频| 69少妇一区二区| 亚洲成人黄色在线观看| 人人贴人人摸| 亚洲中文日韩欧美大香蕉视频| 亚洲性爱成人| 国产精品网站免费| 欧美亚洲日韩16色| 亚洲 自拍偷拍 欧美| 亚洲成人精品久久久| 亚洲成人在线高清| 人人弄人人摸| 无遮挡一级毛片视频免费的| 色老汉色| 极品少妇99| 好吊色一区| 久久蜜色情在线视频xxx免费观看| 蜜臀精品1区2区| 啊啊啊啊啊好大好舒服想要| 亚洲欧洲综合| 欧美99999| 久久欲| 国产AV色黄看到爽| 97亚洲性爱| 91殴美大片| 久久久亚洲精品电影免费看| 亚州欧美总和| 久久久96精品| 在线97视频| 99这里只有精品国产| 日韩一性一交一A片俄罗斯 | 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 4虎在线观看| 蜜臀久久99精品久久久久久成人小说 | 久久精品熟妇丰满人妻99| 亚洲日韩电影| 精品 码产区一区二-1080P高清在线www-B029AV | 丁香五月色| 人妻少妇久久久| 成人自拍三级在线观看| 黄色电影观看久久9| 亚洲高清无码AAA久久久精品| a级理论午夜日本| 久久久久免费少妇| 丰满精品人妻少妇久久字幕| 91精品国产91熟女| 国产高清26uuu| 一区二区三区精品黑丝白丝酒店对鸡 | 高清无码在线播放网站| 伊人网av| 婷婷午夜清品久久久久久久性色视频观| 久久在线观看免费视频| 国产av美女被艹的乱叫| 日本孕妇孕交| 日本护士高潮| 大香蕉伊在线久草麻豆天堂故事| 欧美激情精品| 久久高清欧美国产| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 91中出| 乱伦熟女区| 黄色大片一区二区密桃丝袜| 另类图片五月天| 亚洲AV成人无码一二三久久| 操美女人妻| 麻豆一区二区AV天美| 亚洲国产精品成人综合| 午夜人妻精品综合在线| 色五月综合| 91红杏| 日韩人妻无码不卡网站| 欧美国产伊人久久久久| 少妇高潮九九九九九九九| 欧美亚洲一级在线观看| 大香蕉手机在线视频| 人人九九精| 一二三四视频中文字幕在线看| 国产后入精品| 亚洲国产精品9999在线观看| 日韩钢筋无码高清啾啾啾| 视频不卡中文字幕| 校园春色之综合网| 亚洲高清欧美总合| 亚洲丝袜天堂| 26uuu久久| 欧美激情视频一区二区三区不卡| 在线中文字幕视频| 久久天天摸| 久久久96| 日本免费不卡二区| 操操操五月天婷婷丁香影院| 欧洲免费一区二| 啊啊啊免费视频| 大香交伊人网| 欧美性暴力| 香蕉在线一区二区三区| 亚洲情色视频| 一区二区三区四区五区高清无码永久视频| 中文字幕三四五区| 丰满人妻一区二区三区四| 久久久精品网站| 青娱乐导航AV| 日本性交操一区二区不卡系列| 欧美爆操91| 国产综合网站在线播放 | 亚洲男人在线观看天堂| 狠狠五月天| 国产精品乱码久久久久| 日韩精品三区四区| 中国一级特黄大片护士| 少妇色综合| 色婷婷亚洲婷婷| 欧美色综合网| 91 丝袜在线| 91高清无码下载| 少好三P| 日韩国产中文字幕| 91视频精品| www.99热在线只有精品| 在线观看黄色电话| 婷婷av在线中文字幕| 亚洲成人精品久久久| 午夜精品久久久久久久久久蜜桃| 岛国天天午夜影院传媒网| 亚洲,欧美,春色,另类| 91亚洲色图| 亚洲吊色| 亚洲第一页色| 国产乱人伦AVA麻豆软件.| 综合色欧美| 91电影色诱| 久久‘黄片视频| 丁香九月婷婷| 性色亚洲| 91美女视频直播| 九九热免费国产视频婷婷伊人五月 | 亚洲大色鬼| 97舔舔| 可以在线观看AV的网站| 玖草在线视频| 男人成人黄色视频在线观看免费下载| 日韩成人色图| 五月丁香啪啪| 极品尤物女神在线观看| 白丝一区| www欧美91| 日韩78m视频| 看黑人AV不卡| 九九在线精品| 大胆91| 国产成人精品亚洲日本| 国产女生在线| 精品国产一区二区三区香蕉欧美| 不卡在线观看视频| 亚洲中文丝袜美腿诱惑字幕| 99re在线视频这里只有精品| 精品无码一区二区人妻久久蜜桃| 中文字日本乱码| 亚洲精品视频二区| 欧美亚洲综合色| 国产精品午夜高潮呻吟久久av| 欧美真人抽搐一进一出gif| 四虎免费在线播放| 国产精品国产| 射丝袜大香蕉| 中文字幕女同在线| 蜜臀无码一区二区| 老女人老91妇女老热女| 欧美美女在线高潮999| 亚洲熟女国产综合另类| 澳门成人网站久国产日韩| 免费观看欧美日韩操逼视频| 五月丁香亭亭| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 丝袜美腿av女优在线| 超碰97极品9| 色偷综合| 淫纸中9区| 欧美综合色综合| 劲爆欧美人妖三区91| 伊人一区二区三区| 中文字幕十五区| 天天舔九色婷婷| 欧美激情 日韩精品| 久久精品一区二区三区不卡| 日日干夜夜操视频h| 800zy一区二区| 99黄页网站| 天天摸天天舔天天操| 久久久久久中文版| 综合一区二区影视| 美女十八禁| 成人无码欧美一级A片狼牙直播| www.av不卡中文字幕| 精品久久久久成人码免| 久超碰这里只有精品| 天天日熟妇| 密臀成人视频久久久| 99热线麻豆| 野狼福利社区| 国产成人无码a| 免费簧片在线观看| 欧美日韩国产传媒在线精品| 91九九九小逼| 东京热毛片调教| 美女9118禁| jazzjazz国产精品麻豆| 国产精品干干干| 欧美精品自慰系列寂寞少妇| 欧美极品少妇交| 天天摸夜夜操视频| 欧美色图校园春色| 精品国产丝袜一区二区三区乱码| 久久久免费一级黄片| 国产亚洲一黄| 91国产丝袜美女| 中文字幕丝袜| 在线a v| 六月丁丁香| 9热9热综合网| 91美女视频直播| 曰韩中文人妻视频| 亚洲无码AV九九九| 久插综合| 欧美色女人| 久久99人妖视频国产| 六月丁香五月婷婷| 国产97综合| 欧美激情性爱视频网站| 日韩精品.久久精品.AV女优.天美传媒| 97硬碰| 深爱伊人影院| 性色av蜜臀av色欲aV| 熟妇熟女亚洲天堂网| 97免费视频在线观看视频| 色香欲综合| 首页中文字幕中文字幕免费| 国产天天看| 啊啊啊啊啊在线| 欧亚在线视频| 国产精品午夜精品| 亚洲91在线播放影院| 在现视频女上位好爽| 欧美人妻一区二区| 一级久久性爱视频| 人人妻人人色一区二区三区| 人妻乱仑一区二区三区| 先锋音影AV| 久久一二三四| 亚洲蜜臀懂色| 91香蕉国产尤物视频| 色人久久| www.acm成人黄色毛片| 97干97色| 999久久久久久久精| 2017天天插| A片 AV一级在线播放观看免费 | 成人七区| 少好三P| 亚洲欧美中文一区二区三| 亚洲一二三精品久久网| 韩国一级做a久久久久| 91人妻PORNY九色大屁股| 熟女露脸激情自拍视频| 国产区性爱在线视频秋霞豆| 欧美自拍网| 日韩另类| 999久久久九九九九| 婷婷午夜| 欧美亚洲自拍另类人妻| 二区熟妇韩日| 免费福利视频中文字幕| 强奸乱伦免费网站| 亚洲天堂美臀在线| 国产一级作爱毛片| 东北女人性交| 少妇与黑人高潮在线| 欧美中文字幕日韩在线| 韩国毛片一区二区三区| 能看的av| 26uuu性物| 夫妻AV网站| 五月丁香色色网| 性一级黄色录像片网站导航| 99re6久热只有精品6在线直播| 亚洲欧美日韩偷拍色图| 亚洲五区熟女| 日韩婷婷| 久操91视频| 精品9区| 亚洲AV成人无码久久精品播放| 亚洲欧美内射| 久久9亚洲| 欧美人与性动交a美精品| KK色在线影院| 欧美熟爽综合| 国产一区二区精品久久99| 欧美人人天天网| 亚洲九区| 在线观看无码三级少妇| 97在线日韩中文字幕| 欧美亚洲日韩人妻在线观看| AV一起草在线| av天堂加勒比| 夜夜狠狠躁日日躁色视频| 久久久成人国产精品无码| 亚洲美女精品九九视频| 久久同城AV| 婷婷性网| 亚洲AV不卡在线观看| 久久黄黄| 亚洲精品日韩国产欧美| 青娱乐老司机视频| 97超级久久| 日韩9999| 国产又黄又猛又粗又爽的网站| 性久久| 中文字幕欧美日韩三级| 黄页网站成人免费| 国产乱青青草久久| jiujiujiujingpin| 国产久久一区二区三区野外在线| 久热大香蕉| 性在久久久久久| 97在线观看免费视频| 少妇高潮喷水无套久久久久久| 欧美色图天堂在线| 五月婷久久| 久久在线观看免费视频 | 国产精品久久伊人| 日韩高清黄片| yw尤物av无码点击进入麻豆| 4虎在线观看| 九九亚洲色在线观看| 爱欲AV| 久久人妻视频| 色综合色色| 国产性爱在线视频一区二区| 搡老女人911熟妇老熟女| 九九九九精品视频| 国产激情在线| 亚洲在线观看| 欧美少妇高潮| 亚洲无码日韩电影| 精品免费成人久久| com 首页 18岁 禁区 女优 免费 精选 同城| 欧美久久婷| 日韩欧美日韩| 91激情| 亚洲图片欧美| 男啪女色黄无遮挡免费观看| 伦激情人妻另类人妻| 亚洲不卡三级手机播放| 日本操逼视频在线| 一级人妻性爱视频| 免费精品中文字幕| www.人人cao| 欧美综合区| 国产视频一区二区免费| 97人人模人人爽人人| 亚洲少妇中文字幕网址| 六月色色| 无码一区二区三区四区五区六区七区八区九区十区视频 | 97国产色图| 日韩精品怡红院| 天美传媒av一区二区| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 久久伊人大香蕉| 国语精品av| 歐美性天天| 亚洲图片 欧美电影| 91女人的网站| 凹凸精品熟女在线观看| 成人在线视频一区| 国产少妇内射| 97色综合中文网| 人妻少妇久久中文字幕一区二区 麻豆 | 精品国产肉丝袜在线拍国语| 人妻AV 中文字幕的| 狼人综合婷婷激情四射 | 欧美91视频| 国产女生在线| 九九热免费国产视频婷婷伊人五月 | 一区二区亚州激情久婷婷欧美| 欧美日韩妖精91com| 国产精品视频在线观看| 自拍偷拍草一草| 日韩午夜精品一区二区三区电影| 国产超碰在线| 97频视在线| 日韩精品午夜操呦呦不卡影院| 亚洲天堂男人天堂| 探花一区在线| 色香在线| 91丨人妻丨国产丨丝袜| 艹少妇网站| 91人妻人人妻| 曰本特级特黄特色黄色A级网站高清在线免费看 | 日韩欧美性爱电影在线观看| 操我无码| 久久av网| 诱惑网综合| 日本欧美一区二区三区免费| 在线观看十八禁| 久9综合在线| 天天日天天搞天天干| 五月婷婷色色| 九九综合网| 亚洲网站一区二区在线| 亚洲综合激情五月久久| yazhouzaixian| gogogo免费高清看中国国语| 殴美牲| 9精品久久久久| 做爱A级亚欧| 富二代亚洲精品99| juliaann欧美丝袜办公室| 奇米四色影视777久久久| 精品网站9999| 亚洲熟妇A V黑人| 久久久精品视频免费观看| 尤物av网站| 天天做天天爱| 亚洲色色色| 欧美综合色图网| 色青青久久影视| 欧美亚洲厕所精品偷拍91| 91中出| 九九热视频在线观看| 超碰在线1234区| 超碰在线观看av不卡| 日本九九久久99播| 无码久久亚洲高清,| 天美麻豆精品视频99| 亚洲黄色| 日本熟妇一区二区三区| 国产日韩久久| 蜜臀久久99精品久久综合| 九久9精品| 67914亚洲精品| 欧美激情高清性猛交| 久99| 熟妇乱伦一区二区| 精爱久久| 蜜乳AV一区| 日韩人妻丝袜美腿中文| 91三级理论片播放器| 亚洲电影91| 中文字幕狠狠玩| 久草电影网| 97色在线| 综合网亚洲| 成人网欧美风情| 成人无遮挡毛片免费看| 日本孕妇孕交| 婷婷亚洲综合| 日韩激情电影中文字幕| 欧美少妇色综合| 中文字幕aⅴ在线视频| 国产熟码AV| 成人夜夜爽| 久久香蕉影院| 日韩欧美性吧婷婷乱伦大香蕉| 2019AV天堂| 精品一区二区综合熟妇| 嗯嗯不要 视频| 玖色AV| 成年女人黄网站| 午夜亚洲| 国产午夜视频| 色色婷婷五月天| 男人的天堂2018| 91精品国久久久久久无码| 欧美在线观看综合国产| 天天日天天干天天操| 欧美国产有色电影| 色五月婷婷在线| 亚洲色欲天天天堂色欲网女| 午夜九九| 啊啊啊不要啊啊受不了了视频在线| 精品亚洲国产成人精品| 搡老女人老91妇女老熟女| 成人精品视频| 99丝袜福利在线播放| 欧美性爱1080p| 夜夜爽夜夜高潮夜夜爽| 一本久久精品中文字| 精品国产丝袜一区二区三区乱码| 亚洲欧美视| 亚洲国产剧情少妇激情| 中文字幕av乱伦| 边做饭边操逼逼| 欧美色图校园春色| 亚洲国内精品成人不卡| 色香阁在线| 在线视频日韩欧美国产| 日本欧美一区二区三区视频麻豆| 91国模| 91色伦| 九九九九九精品十六| 婷婷尹人大香蕉免费| 无码高清专| 亚洲电影中字一区二区| 熟女人妻一区二区三区免费看 | 黄片com.| 欧美黄色大片在线观看| 国产精品懂色tv影视免费观看 | 920日本午夜免费| 国产精品久久久久无码AV会牛| 中文字幕第9页萱萱影音先锋| 在线v中文字幕一区二区三区| 东北少妇高潮zzzz| 日韩大香蕉| 加勒比aⅴ| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 啊啊啊免费视频| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 亚洲精品天天影视综合网| 免费观看有码高清视频| 涩涩五月天| 丁香六月婷婷综合| 午夜丁香婷婷| 五月婷婷激情网| 99视频只有精品| 日本天天色| 丁香六月综合激情| 一本久道久久综合狠狠爱| 大香蕉五月天| 韩国久久97| 98一区二区精品| 婷婷色一区| 黄色大片一区二区密桃丝袜| 日日日啊啊啊| 啊啊啊啊二区好大| 久久99精品九九久久久婷婷| 欧美91久久久久| 91黑丝美女| 91AV老熟女视频| 97久久久| 嗯嗯啊啊啊好舒服| 天天综合网入口~91| 日本不卡高清免v欧美日韩在线观看| 99色悠悠| ai欧美亚洲小说| 欧美色图自拍| 啊啊啊啊操死我| 天天看夜夜看日日干| 免费1级a做爰片观看| 亚洲成人av电影在线| 日韩av一级黄片| 无码99| 亚洲瓯美色图| 日韩色图 一区二区| 91综合天天| 国产在线观看一区二区三区| 色婷婷淫色网| 色香网| 性天堂| 国产女乱淫真高清免费视频| 久久99亚洲精品久久99果| 日韩三级一区 | 国产精品3| 啊v在线观看视频| 国产91av在线播放| 久久综合激情| 一区久久久二区| 十八禁一区二区无码观看| 最新制服中文第一页| 中文字幕美女91| 国产成人无码久久精品| 免费人人搞97| 清纯唯美综合| 国产精品女久久久久av爽| 丁香五月激情综合| 淫乱图区 | 一区二区三区黄色片a| 狠狠综合网| 99www.bibizy香蕉资源国产一区二区三区高清 | 思思热免费视频观看| 人妻在线中出视频| 超碰精品97| 国产日韩区| 超碰亚洲97| 欧美97av| 亚洲色图日韩精品| 啊啊啊快操我视频| 天天插网| 夜夜操2028| chaopen97久久| 人人操人人操人人人操| 操九九九九九九| 欲色综合| AV综合中文字幕干| 国产女主播视频在线观看| 另类亚洲一区二区三区| 七久久久| 91丝袜视频在线观看| 成人免费在线网站| 国产亚洲精品农村妇女| 亚洲91色在线| 国产又黄又粗又猛大片| 亚洲宅男天堂| 欧美+日产+中文| 日韩中文字幕二区| 久久久久久无码人妻中文字幕| 成人av影院在线观看| 色哟哟-国产专区| 国产精品人妻无码久久久互動交流| 五月丁香综合啪啪| 午夜亚洲| 久久久久久人妻| 欧美性夜| 色av中文字| 久久精品熟妇丰满人妻99| 久久人妻办公室视频| 97久久久久| 色婷婷丁香五月| 午夜爽爽爽| 98一区二区精品| 91色图| 天天碰操中国年青熟妇| 久久欲| 青青草国产盗摄一二三区| 草莓精品视频在线免费观看| 亚洲激情色片 | 久草视频制服诱惑| 天天插夜夜操| 九九九热精品| 日韩婷婷| 国产精品人妻无码久久久老鸭窝 | 黑人精品欧美一区二区蜜桃| 91久久久久久| 九九九九国产| 久久偷拍人| 夜夜天天噜狠狠爱2021| 97综合久第一页| 五月天激情网站| av毛片aaaaa免费看| 97色涩| 欧美色综合影院| 91殴美| 精品97精品97| 天天干天天狼在线视频| 丰满人妻一区二区三区免费| 精品一区二区三区最新| 伊人久久大香线蕉无码| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 91在线色综合| 天天懆天天日| 清纯唯美综合亚洲| 97内射偷拍| 国产亚洲精品第一最新| 夜色91| 欧美色日| 你操综合| 最新啪啪视频| 很很操在线| 欧美黑人168页欧美黑人167| 久久久精品国产亚洲伊人| 1人人看人人摸人人操| 99re28在线观看| 大香蕉伊人在线成人AV在线观看| 欧美午夜一区二区三区| 免费精品无码一级毛片牛牛影视 | 内射黑丝袜| 丰满翘臀美女影院视频| 欧美网站免费| 久草尤物| 手机在线大香蕉| 日韩欧亚中文在线| 亚洲精品97在线| 国产97色在线| 伊人久久综合精品欧美| 91精品国产91综合久久蜜臀| 久久久九九| wwe 天天干.com| 中文字幕一区av| 无码国产精品久久久久| 国产福利视频精品视频| 日韩综合色图| 人妻少妇无码| 超碰免费欧美7| 亚洲欧美另类少妇精品| 99∨VTV| 亚洲成A∨人影院在线欢看| 亚洲高清无毛一区二区| 91亚洲色图| 大香蕉伊人75| 伊人97| 黑白配性爱AV成| 后入式视频国产自| 亚洲精品一卡二卡三卡福利视频网站| 97综合在线观看| 丝袜 亚洲 偷拍| 成人国产精品三级A片| 国产日韩精品人妻久久久久色欲网站| 亚洲美女AV无码| 久久αⅴ| 欧美九九九九九| 97鸡把在线视频| 竹菊一区二区三区AV线| 亚洲色天堂九9| 999久久芭蕾| 干妹子| 青青草原成人| 国产精品农村妇女精品| 极品美女嘿咻| 亚洲图片欧美偷拍| 9久久精品| 91综合网站| 欧美色欧美| 国产91福利小视频在线观看| 东北少妇高潮zzzz| 激情小说图片亚洲首页| 日本操逼视频不卡直接放| 欧美不卡在线一区二区| 五十路六十路七十路熟婆| 久久欲| 色网在线视频观看免费| 日韩人成网站在线播放| 国产日本久久免费精品| 亚洲激情av| 欧美日日网| 美女人妻色网站| 伊人久久大香蕉线AV五月天| 传媒免费一区二区三区| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 欧亚免费视频| 91粉芽高清在线一区二区| 久热伊人99re| 好好的日:com久久九九| 综合激情一一91| 青女偷拍网| 中文字幕欧美日韩三级| 亚洲性爱乱操x| 极品尤物女神在线观看| 欧美色色色| 国产视频一区二区三区久久亚洲天堂| 亚洲激情色片| 青青草原香蕉日本Ap| 97超碰久久| 中文字幕奈奈美被公侵犯| 熟女视频久久| 精品无吗久久| 五月天AV资源| 男女啪啪网站免费视频| www.大香| 蜜臀久久久久久999| 亚洲性少妇| 欧美色乱| 国产精品蜜乳AV| 久久黄黄| 91碰碰| 午夜国产综合视频在线观看| 国产真实野战在线视频| 久久本道| av天堂加勒比| 操逼免费视频无码国产| renqi久久久久久久久久久久| 日本一天色道久久久精品视频| 自拍啪啪视频| 翔田千里Av在线| 天天干,天天日| #NAME?| 2023天天操夜夜操| 99热精品在线播放| 欧美性天天影院| 日本乱人伦片中文三区| 亚洲高清在线| 999 久久久| 欧美性爱精品七区| 一区二区你上我| 另类图片五月天| av天堂精品久久| 色一射色一射| 大香蕉中文201| 亚洲黄色a级片| 黑丝日韩av丝袜av| 无码国产精品96久久久久孕妇| 在线视频日韩欧美国产| 超碰人妻中文在线| 久久丁香久草综合网| julia高潮后不停追击中出| 老司机午夜精品福利视频一区二区 | 操逼逼无码| 精品九九九九九九九九九| 亚洲97成人在线观看| 91亚洲精品青草| 97伊人网| 五月天婷婷综合网| 亚洲欧洲日韩中文字幕一区| 国产色精品午夜大片| 日韩欧美资源| 欧美一级A片不卡视频。| 大香蕉中文aV在线| 国产无码三级视频在线观看| 中文字幕高清20页视频| 人妻丝袜日本| 淫妻综合网| 97久久国产精品女不卡| 五月婷婷色色| 91人人操| 熟女啪啪视频| 国产色产精品在线观看 | 欧成人精品H无码| 91大学精品激情戏| 欧美亚洲手机在线| 色性综合| 3PAV乱伦视频| 色噜噜国产在线| 国产亚洲精品一区二区三区| 一区二区首页| 狠狠操官网| 校园春色综合香蕉| 你懂得91| 欧美天天搞| 东北女人av| 国模无码人体一区二区三| 日韩9999| 亚洲精品aa久久伊人| 婷婷久久久精品| 人妻啊啊人妻啊| 女性喷水高潮在线观看| 精品人妻视频一区二区三区蜜桃视频| 中国AV美女| 久久久成人精品| 狠狠干婷婷| 人人操欧美风骚| 色香在线| 日韩婷婷| 亚洲欧美日韩免费观看| 在线观看视频91| 图片区小说区| 青草综合| 激情人妻另类| 九九热视频在线观看| 亚欧无码线免费观看视频| 欧美性爱一区| av一区二区三区 中文| 色噜噜狠狠色综无码久久合欧美| 夜夜爽妓女| 操逼操逼视频操逼| 超碰在线一区二区三区| 亚洲综合小视频小说在线观看| 伊人五月天激情| 囯产精品久久久久久久久久二区三区| 二对二中文字幕。| 亚洲精品视频在线播放| 99婷婷一区二区| 蜜桃午夜视频一区二区| 嗯嗯嗯不要不要免费视频| 熟女精品va中文字幕| 日夜伊人网| 欧洲精品一二三在线| 久久婷婷五月天| 日韩欧美大力操| 日本不卡一二区| 北京美女一区二区| 25国产精品免费观看| 八戒无码国产午夜福利| 久久这里只| 亚洲男人的天堂网| 91逼逼女人91| 中文字幕性感少妇av| 欧美操人视频| 天天欧美| 亚州图片第一页| 欧美色图私拍91| 日韩三级一区| 亚洲国产高清福利视频| 十八禁视频一区二区| 9久久久久久| 97超碰精品成| 骚逼一区二区| 野狼激情网| 日本久久天堂| 久久久久久久国产视频| 乱性AV| 久久久久久久久999| 久操视频在线| 中文字幕视频免费| 黄网站黄视频网站进入口| 野狼激情网| 久久性爱视频| 国产日韩欧美三级片| 久久精品毛片免费不卡| 日韩熟女操逼| 91精品人| 欧美色宗合| 欧美AB在线| 欧美色视| 欧美色图第一页| 久久久精选| 婷婷性网| 99re视频在线播放青草| 亚洲自拍小说| 午夜视频久久久| 国产夫妻性生活视频| 亚洲系列欧美| 久久人人爽av亚洲精品天堂桃色| 亚洲大色堂| 亚码人妻| 欧美一品道| 欧美亚洲综合999| 天天操天天谢| 久久久一区二区| 九热超碰| 亚洲色天堂九9| 免费的av网| 亚洲欧美第一页| 一区二区亚州激情久婷婷欧美 | 丁香六月激情| 亚洲精品国产熟女久久久| 97色涩| 欲色影视综合吧| 亚洲美女精品| 91色综合激情| 中国黑人三级片网站上区| 亚洲天堂第一页| 久久国模av| 蜜桃精品一区二区三区久在线| 中文字幕人乱码中文字的预防方法| 嗯嗯,好大,好爽,好骚| 久噜噜| 国模久久在线| 啊啊啊啊嗯嗯在线久久久| 夜夜高潮夜夜爽夜夜爱爱一区| 干B网| 九九综合九九综合| 综合伊人激情| 国产亚洲精品av一区| 欧美性爱十八禁| 久久九九99| 图色综合网| 无码人妻系列少妇| 国产精品在线免费| 亚洲午夜未满十八勿入网站日本又色又爽又黄| 亚洲网站一区二区在线| 中国一级操逼视频| 99视频内射三四| 99自拍B亚洲 | 国产资源中文字幕在线| 91香蕉视频在线观看免费| 欧美日韩中文亚洲v在线综合| www.99热| 精品亚州18| 风间由美日韩欧美久久| 欧美18老人禁| 国产 丝袜 欧美中文 另类| 视频二区美腿丝袜制服人妻欧美| 台湾大香蕉99热| 欧美色图99| 人人操人人爽人人操人人| xxx0国产在线播放| 久久久98网站免费视频| 色色色色色色色色综合| 欧美色图综合网| 一线黄色免费性爱片| 欧美午夜精品久久久久久3D| 久噜噜| 青青色在线观看| 欧美成人一级免费电影| 啊啊啊啊啊在线观看网址| 中文在线视频| 精品美女久久久久| 九九黄色网| 9999亚洲精品| 国产呦精品系列在线观看| 亚洲国产高清福利视频| 夜夜高潮夜夜爽高清视频一| 亚洲精品97久久中文字幕| 亚洲成人在线高清| 东京热男人的天堂网| 风骚少妇视频中文字幕| 中国AAAAAA黄色片| 人妻少妇视频在线播放| 日韩特一级久久| 黄色电影在线播放综合网站| 91 手机在线播放 绯色| 亚洲做性| 殴美在线AⅤ| 四虎国产成人精品免费一女五男| 俞拍久久国应视频| 爱做久久久久久| 中文字幕AV片| 自拍内地三级在线观看| 人妻激情另类| 欧美精品庄| 超碰免费人人| 熟妇一区,二区,三区。| 三级特黄60分钟播放| 人人妻人人操人人乐| 激情在线青青操| 偷看洗澡一二三区美女| 综合九九| 久久成人午夜精品影院 | 五月天婷婷在线看| 九久9热| 国产精品女aA片爽爽视频| 九九成人视频| 青娱乐黄色录像| 97av在线视频| 欧美性高潮| 五月天婷婷基地| 亚洲女优有码无码高清| 欧美性爱在线无码| 亚洲日本大香蕉1| 日亚韩精品视频二区三| 激情视频图片| 久久 国产精品 一区| 99色在线| 99超级碰免费视频| 大鸡巴久久| 亚洲日产专区| 亚洲精品久久久久毛片A片拉屎| 综合色图区| 日韩综合无码一区久久92| 日本少妇va7777| 少妇厨房愉情理伦片bd在线观看| 一区中文字幕二区日韩| 亚洲另类欧美精品| 欧美91在线+|+欧美| 国产操操日韩三级黄| 亚洲AV在线资源| 五月丁香综合激情| 亚洲91色| 欧美色66| 国产传媒操逼视频| 成人夜夜| 久久久久成人蜜桃精品| 十八禁啪啪视频| 五十路熟女工口 | 伊人亚洲国产一成人久久精品,久久| 花花AV导航| 一区二区首页| 久久精品店| 蜜臀久久久99久久久久 | 最新精品久久蜜桃 | 在线啊v一区| 中日韓欧美高清| 麻豆性爱视频在线播放| 亚洲无码?第一页| 上床啊啊啊| 啊啊啊啊啊在线视频| 国产真实野战在线视频| 欧美 亚洲 在线| 性性欧美| 97色在线| 欧美偷拍区| 亚洲高潮影院| 久久中文色图| 国产成人精品亚洲日本| 少妇一区二区三区| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 久99| 性久久久| 变态综合色| 欧美999999| 六六久久日韩不卡| 中文字幕亚洲热播人妻| 男人天堂东京热| 免费亚洲国产精品久久一区| 开心激情婷婷| 欧美一级黄片视频在线| juliaann欧美丝袜办公室| 夜夜福利| 日韩偷拍色图| 入口操逼网站| 免费αV在线视频| 中文字幕一区二区无码成人 | 天天草夜夜草高潮片| 人人操人人肉久久精品| 日韩精品三级片长长久久| 国产欧美精品日韩区二区麻豆天美| 能在线播放的国产三级| 91在线视频国产网站| 亚洲伊人青青草| 啊啊啊不要啊啊受不了了视频在线 | 久久久久免费少妇| 欧美激情中文字幕另类小说| 国产亚洲色停停久久99精品91| 欧美亚洲在线| 丝袜美女诱惑 91 视频| 中文字幕 一区二区 亚洲无码| 日本肉体xxxx裸交| 岛国网址国产| 奇米四色网| 中文字幕精品探花视频| 少妇天堂| 久久久久久久久女黄| 极品AV网站在线观看| 东北老女人的激情视频| 四虎 精品 WWW| caorenqi shipin| 香蕉婷婷| 日本午夜久久电影| 久久激情亚洲精品无码?V| heyZO天然素人无码AⅤ专区| 东北女人无套内谢视频| 欧美一级二级三级| 色老大| 九九热精品视频六| 骚鸭AV| 人妻丰满熟妇av无码区蜜桃| 任你干在线视频| 天堂网 主播 亚洲| 欧美一级专区免费大片| 亚洲男人的天堂在线看| 极品后入免费视频| 色九九九综合| 亚洲色入欧美| 丝袜美腿射精91| 国产诱惑| 五月天亚洲网| 久9综合在线| 国产日本顶级一区二区三区| 亚洲第一视频 欧美风情 日韩| 夜夜嗨一区二区三区三州加勒比| 蜜臀一二三区| 欧美日韩人妻精品系列一区二区三区| 黄页网站成人免费| 嗯嗯啊啊啊好爽| 神马麻豆福利院| 啊啊啊操死我| A级片日韩欧美国产欧美视频精选观看| 人人爱人人乐人人操| 久久 国产 无码| 天天看天天在线精品| 无码精品蜜桃一区二区三区ww| 国产一区二区在线播放量| 久久精品国产亚洲AV成人直播|