:從化學(xué)實驗教學(xué)到復(fù)雜對象的分步構(gòu)建)
示例工程【免費下載鏈接】Unity3DTraining【Unity雜貨鋪】unity大雜燴~項目地址https://gitcode.com/gh_mirrors/un/Unity3DTraining點擊查看免費下載建造者模式Builder Pattern又稱生成器模式是 GoF 二十三種設(shè)計模式中典型的創(chuàng)建型模式其核心思想是將復(fù)雜對象的構(gòu)建過程與產(chǎn)品本身解耦讓構(gòu)造算法與組成部件相互獨立由統(tǒng)一的指揮者Director按固定步驟驅(qū)動建造者Builder從而在保證流程穩(wěn)定的前提下產(chǎn)出不同表象的產(chǎn)品。本文以 Unity3DTraining 倉庫中 DesignPatterns/BuilderPattern 的講解文檔為骨架結(jié)合配套的 C# 控制臺工程源碼完整剖析經(jīng)典四角色結(jié)構(gòu)、老師/學(xué)生化學(xué)實驗的教學(xué)案例、與工廠模式的區(qū)別、適用場景與無 Director 變體讀完即可在自己的項目中落地按步驟、可替換、不遺漏的對象構(gòu)建方案。一、模式概述為什么需要按部就班地造對象在真實項目中經(jīng)常會遇到需要構(gòu)建比較復(fù)雜的對象并對其多個屬性進行賦值的復(fù)雜操作。此時程序員的一時疏忽可能導(dǎo)致某個屬性未被賦值進而引起對象的失效。建造者模式正是針對這類問題而設(shè)計創(chuàng)建一個 Director指揮者來按部就班地指揮一個對象的創(chuàng)建可以有效避免意外發(fā)生。使用建造者模式后用戶只需要指定創(chuàng)建的類型就可以得到相應(yīng)的對象而具體的建造過程和細節(jié)就被 Director 和 Builder 隱藏了。這正是依賴倒轉(zhuǎn)原則的體現(xiàn)——抽象不應(yīng)該依賴于細節(jié)細節(jié)應(yīng)該依賴于抽象。文檔中給出的角色類比非常直觀老師Teacher扮演Director指揮者角色學(xué)生Student扮演Builder建造者角色Teacher 隔離了客戶端與具體步驟的依賴。二、模式四角色職責邊界與協(xié)作關(guān)系建造者模式由四個核心角色組成配套源碼分布在 BuilderPattern 目錄下一一對應(yīng)角色職責倉庫對應(yīng)類型文件Product產(chǎn)品被構(gòu)建的復(fù)雜對象由多個部件組成Product.csBuilder抽象建造者聲明構(gòu)建各個部件的抽象接口Builder.csConcreteBuilder具體建造者實現(xiàn)各部件構(gòu)建邏輯提供獲取產(chǎn)品的方法ConcreteBuliderA / ConcreteBuilderBBuilder.csDirector指揮者定義構(gòu)建算法的步驟順序與具體部件解耦DirectorBuilder.cs四個角色協(xié)作時客戶端只面向 Director 和抽象 Builder 編程產(chǎn)品內(nèi)部的組裝過程被完整隱藏。下面結(jié)合源碼逐層拆解。1. 產(chǎn)品類 ProductProduct.cs 用Liststring收集組裝出來的部件并提供Add與Show兩個方法class Product { Liststring parts new Liststring(); public void Add(string part) { parts.Add(part); } public void Show() { Console.WriteLine(Create Product); for (int i 0; i parts.Count; i) { Console.WriteLine(parts[i]); } } }2. 抽象建造者 Builder 與兩個具體建造者Builder.cs 中抽象類Builder聲明了兩個部件構(gòu)建步驟BuilderPartA()、BuilderPartB()以及獲取結(jié)果的GetResult()abstract class Builder { public abstract void BuilderPartA(); public abstract void BuilderPartB(); public abstract Product GetResult(); }兩個具體建造者分別向產(chǎn)品中填充不同的部件內(nèi)容ConcreteBuliderA組裝 Part A / Part BConcreteBuilderB組裝 Part W / Part Z。由于都繼承自同一個抽象基類相同的構(gòu)建步驟可以被替換出完全不同的產(chǎn)品表象——這正是多態(tài)性在建造者模式中的典型應(yīng)用。class ConcreteBuilderB : Builder { private Product product new Product(); public override void BuilderPartA() { product.Add(Part W); } public override void BuilderPartB() { product.Add(Part Z); } public override Product GetResult() { return product; } }3. 指揮者 Director 固定構(gòu)建算法同一個 Builder.cs 中Director.Construct()只依賴抽象的Builder接口按固定順序調(diào)用步驟class Director { public void Construct(Builder builder) { builder.BuilderPartA(); builder.BuilderPartB(); } }指揮者本身不關(guān)心具體建造者往部件里放了什么內(nèi)容只保證先 Part A、再 Part B的算法順序不被破壞這就是文檔中所說的保持對象創(chuàng)造過程的穩(wěn)定性。三、倉庫配套演示兩種形態(tài)的完整跑通1. 經(jīng)典形態(tài)Director 指揮兩個 ConcreteBuilderProgram.cs 是控制臺程序入口工程為 .NET Framework 4.5.2見 BuilderPattern.csproj 與 App.config客戶端只做三件事創(chuàng)建 Director、準備不同 Builder、交由 Director 構(gòu)建并取結(jié)果Director director new Director(); Builder builderA new ConcreteBuliderA(); Builder builderB new ConcreteBuilderB(); director.Construct(builderA); Product productA builderA.GetResult(); productA.Show(); director.Construct(builderB); Product productB builderB.GetResult(); productB.Show();運行后productA.Show()依次輸出 Part A / Part BproductB.Show()依次輸出 Part W / Part Z——同一套 Director 算法產(chǎn)出兩種不同內(nèi)部表示的產(chǎn)品。2. 教學(xué)形態(tài)老師指揮學(xué)生完成化學(xué)實驗這是文檔中老師為 Director 角色、學(xué)生為 Builder 角色的具體落點。抽象學(xué)生基類 Student.cs 把實驗流程固定為四個步驟public abstract class Student { public abstract void PrePareEx(); // 實驗前的準備工作 public abstract void PourReagent(); // 加入氫氧化鋇 public abstract void PourCarbon(); // 加入二氧化碳 public abstract void ShowResult(); // 展示實驗結(jié)果 }由于抽象類定義了系列抽象方法子類如果不實現(xiàn)就會編譯報錯從語言層面杜絕了漏做某個步驟導(dǎo)致實驗失敗的可能——這正是建造者模式防止屬性/步驟遺漏的機制。兩個具體學(xué)生繼承該基類并各自實現(xiàn)步驟StudentA.cs通入少量二氧化碳結(jié)果出現(xiàn)了沉淀StudentB.cs通入大量二氧化碳結(jié)果出現(xiàn)沉淀后又消失了。指揮者老師 Teacher.cs 持有抽象Student通過構(gòu)造器注入后按固定順序指導(dǎo)實驗class Teacher { private Student student; public Teacher(Student student) { this.student student; } //老師指導(dǎo)學(xué)生實驗 public void DirectExperiment() { student.PrePareEx(); student.PourReagent(); student.PourCarbon(); student.ShowResult(); } }客戶端同樣只需替換具體學(xué)生即可切換實驗結(jié)果Program.csStudent studentA new StudentA(); Teacher teacher new Teacher(studentA); teacher.DirectExperiment(); // 輸出出現(xiàn)了沉淀 teacher new Teacher(new StudentB()); teacher.DirectExperiment(); // 輸出出現(xiàn)沉淀后又消失了實驗流程完全一致僅僅替換具體建造者就得到了不同的實驗結(jié)果——也就是改變產(chǎn)品的內(nèi)部表示試劑添加量只需要再定義一個具體建造者的直接證明。四、建造者模式 VS 工廠模式同門不同道建造者模式與工廠模式都屬于創(chuàng)建型模式目的都是得到一個對象但側(cè)重點截然不同詳見 README.md 的對比章節(jié)對比維度工廠模式建造者模式側(cè)重點將對象的實例化延遲到子類保持對象創(chuàng)造過程的穩(wěn)定性產(chǎn)品表象創(chuàng)建相同表象的對象在固定步驟下得到多種表象的實例與客戶端的關(guān)系都隔離了創(chuàng)建過程都隔離了創(chuàng)建過程選擇依據(jù)面包烤制柜臺只需向工廠拿同一類面包化學(xué)實驗步驟相同但結(jié)果不同文檔用兩個生活化例子做了精辟類比面包的烤制只是創(chuàng)建了很多同種類型的面包柜臺只需向工廠拿面包即可而化學(xué)實驗則側(cè)重于得到不同表象、也就是實驗結(jié)果不同的情況。因此當需要固定流程但希望產(chǎn)出多樣產(chǎn)品時應(yīng)選擇建造者模式。此外建造者模式是多態(tài)性使用的絕佳載體Teacher/Director面對的是抽象的Student/Builder接口運行時傳入哪個具體實現(xiàn)就產(chǎn)出哪種產(chǎn)品擴展新學(xué)生/新建造者完全不需要改動指揮者代碼。五、適用場景與無 Director 變體1. 適用場景判定建造者模式可以說是對流程的抽象當出現(xiàn)以下兩種情況時適合使用README.md 小結(jié)創(chuàng)建復(fù)雜對象的算法應(yīng)該獨立于該對象的組成部分以及它們的組裝方式把構(gòu)造算法收斂到 Director 中部件與組裝互不影響構(gòu)造過程必須允許被構(gòu)造的對象有不同的表示步驟固定、輸出可變強調(diào)對象的差異性。同時它還有兩個實用的副作用用途把構(gòu)造對象的實例邏輯轉(zhuǎn)移到類外面去在這個類的外部定義其構(gòu)造邏輯當某個類包含大量方法、規(guī)模過大時可用建造者模式拆分構(gòu)造職責當只能按部就班地獲取構(gòu)造方法所需要的參數(shù)時參數(shù)依賴前置步驟建造者天然契合這種順序化構(gòu)造場景。2. 無 Director 的建造者模式變體在構(gòu)造步驟算法比較少的情況下可以采用無 Director 的建造者模式由客戶端直接調(diào)用具體建造者的各步驟方法。這樣做雖然增加了客戶端對具體構(gòu)建過程的依賴性但是可以降低程序復(fù)雜性。文檔明確提示在實際項目應(yīng)用中應(yīng)該靈活運用而不是教條式地套用模板——例如當流程只有兩三個固定步驟且產(chǎn)品變體很少時直接讓客戶端驅(qū)動 Builder 反而更清爽。六、模式優(yōu)點與開放-封閉原則建造者模式的核心優(yōu)點原文四點在源碼中均有印證客戶端與產(chǎn)品細節(jié)解耦客戶端不必知道產(chǎn)品內(nèi)部組成的具體細節(jié)產(chǎn)品本身與創(chuàng)建過程解耦相同的創(chuàng)建過程可以創(chuàng)建出不同的產(chǎn)品對象——對應(yīng)Director.Construct()用同一算法產(chǎn)出 ProductA/ProductB具體建造者相互獨立、易于替換與擴展每個具體建造者相對獨立替換或新增具體建造者即可得到不同產(chǎn)品——對應(yīng)StudentA/StudentB的即插即用創(chuàng)建過程精細可控將復(fù)雜產(chǎn)品的創(chuàng)建步驟分解在不同方法中過程清晰、便于程序控制——對應(yīng)PrePareEx → PourReagent → PourCarbon → ShowResult的顯式步驟拆分符合開放-封閉原則增加新的具體建造者不用修改原類庫代碼指揮者類針對抽象建造者類編程系統(tǒng)擴展方便——新增一個StudentC只需繼承Student實現(xiàn)四個方法Teacher與客戶端零改動。七、小結(jié)建造者模式的價值在于它把對象的構(gòu)造算法從對象的部件與組裝方式中徹底剝離用指揮者鎖定流程、用多態(tài)換取差異。在 Unity3DTraining 倉庫中BuilderPattern 工程通過 Product/Director/Builder 的經(jīng)典形態(tài)與 Teacher/Student 的教學(xué)形態(tài)完整演示了從角色劃分、源碼實現(xiàn)到客戶端調(diào)用的全過程。參考代碼可直接閱讀 Program.cs 入口結(jié)合 README.md 的對比與小結(jié)即可在復(fù)雜對象構(gòu)建、多步驟流程組裝等場景中靈活取舍帶 Director與無 Director兩種形態(tài)做到知其然更知其所以然。輸出文章Unity3DTraining 建造者模式實戰(zhàn)從化學(xué)實驗教學(xué)到復(fù)雜對象的分步構(gòu)建建造者模式Builder Pattern又稱生成器模式是 GoF 二十三種設(shè)計模式中典型的創(chuàng)建型模式其核心思想是將復(fù)雜對象的構(gòu)建過程與產(chǎn)品本身解耦讓構(gòu)造算法與組成部件相互獨立由統(tǒng)一的指揮者Director按固定步驟驅(qū)動建造者Builder從而在保證流程穩(wěn)定的前提下產(chǎn)出不同表象的產(chǎn)品。本文以 Unity3DTraining 倉庫中 DesignPatterns/BuilderPattern 的講解文檔為骨架結(jié)合配套的 C# 控制臺工程源碼完整剖析經(jīng)典四角色結(jié)構(gòu)、老師/學(xué)生化學(xué)實驗的教學(xué)案例、與工廠模式的區(qū)別、適用場景與無 Director 變體讀完即可在自己的項目中落地按步驟、可替換、不遺漏的對象構(gòu)建方案。一、模式概述為什么需要按部就班地造對象在真實項目中經(jīng)常會遇到需要構(gòu)建比較復(fù)雜的對象并對其多個屬性進行賦值的復(fù)雜操作。此時程序員的一時疏忽可能導(dǎo)致某個屬性未被賦值進而引起對象的失效。建造者模式正是針對這類問題而設(shè)計創(chuàng)建一個 Director指揮者來按部就班地指揮一個對象的創(chuàng)建可以有效避免意外發(fā)生。使用建造者模式后用戶只需要指定創(chuàng)建的類型就可以得到相應(yīng)的對象而具體的建造過程和細節(jié)就被 Director 和 Builder 隱藏了。這正是依賴倒轉(zhuǎn)原則的體現(xiàn)——抽象不應(yīng)該依賴于細節(jié)細節(jié)應(yīng)該依賴于抽象。文檔中給出的角色類比非常直觀老師Teacher扮演Director指揮者角色學(xué)生Student扮演Builder建造者角色Teacher 隔離了客戶端與具體步驟的依賴。二、模式四角色職責邊界與協(xié)作關(guān)系建造者模式由四個核心角色組成配套源碼分布在 BuilderPattern 目錄下一一對應(yīng)角色職責倉庫對應(yīng)類型文件Product產(chǎn)品被構(gòu)建的復(fù)雜對象由多個部件組成Product.csBuilder抽象建造者聲明構(gòu)建各個部件的抽象接口Builder.csConcreteBuilder具體建造者實現(xiàn)各部件構(gòu)建邏輯提供獲取產(chǎn)品的方法ConcreteBuliderA / ConcreteBuilderBBuilder.csDirector指揮者定義構(gòu)建算法的步驟順序與具體部件解耦DirectorBuilder.cs四個角色協(xié)作時客戶端只面向 Director 和抽象 Builder 編程產(chǎn)品內(nèi)部的組裝過程被完整隱藏。下面結(jié)合源碼逐層拆解。1. 產(chǎn)品類 ProductProduct.cs 用Liststring收集組裝出來的部件并提供Add與Show兩個方法class Product { Liststring parts new Liststring(); public void Add(string part) { parts.Add(part); } public void Show() { Console.WriteLine(Create Product); for (int i 0; i parts.Count; i) { Console.WriteLine(parts[i]); } } }2. 抽象建造者 Builder 與兩個具體建造者Builder.cs 中抽象類Builder聲明了兩個部件構(gòu)建步驟BuilderPartA()、BuilderPartB()以及獲取結(jié)果的GetResult()abstract class Builder { public abstract void BuilderPartA(); public abstract void BuilderPartB(); public abstract Product GetResult(); }兩個具體建造者分別向產(chǎn)品中填充不同的部件內(nèi)容ConcreteBuliderA組裝 Part A / Part BConcreteBuilderB組裝 Part W / Part Z。由于都繼承自同一個抽象基類相同的構(gòu)建步驟可以被替換出完全不同的產(chǎn)品表象——這正是多態(tài)性在建造者模式中的典型應(yīng)用。class ConcreteBuilderB : Builder { private Product product new Product(); public override void BuilderPartA() { product.Add(Part W); } public override void BuilderPartB() { product.Add(Part Z); } public override Product GetResult() { return product; } }3. 指揮者 Director 固定構(gòu)建算法同一個 Builder.cs 中Director.Construct()只依賴抽象的Builder接口按固定順序調(diào)用步驟class Director { public void Construct(Builder builder) { builder.BuilderPartA(); builder.BuilderPartB(); } }指揮者本身不關(guān)心具體建造者往部件里放了什么內(nèi)容只保證先 Part A、再 Part B的算法順序不被破壞這就是文檔中所說的保持對象創(chuàng)造過程的穩(wěn)定性。三、倉庫配套演示兩種形態(tài)的完整跑通1. 經(jīng)典形態(tài)Director 指揮兩個 ConcreteBuilderProgram.cs 是控制臺程序入口工程為 .NET Framework 4.5.2見 BuilderPattern.csproj 與 App.config客戶端只做三件事創(chuàng)建 Director、準備不同 Builder、交由 Director 構(gòu)建并取結(jié)果Director director new Director(); Builder builderA new ConcreteBuliderA(); Builder builderB new ConcreteBuilderB(); director.Construct(builderA); Product productA builderA.GetResult(); productA.Show(); director.Construct(builderB); Product productB builderB.GetResult(); productB.Show();運行后productA.Show()依次輸出 Part A / Part BproductB.Show()依次輸出 Part W / Part Z——同一套 Director 算法產(chǎn)出兩種不同內(nèi)部表示的產(chǎn)品。2. 教學(xué)形態(tài)老師指揮學(xué)生完成化學(xué)實驗這是文檔中老師為 Director 角色、學(xué)生為 Builder 角色的具體落點。抽象學(xué)生基類 Student.cs 把實驗流程固定為四個步驟public abstract class Student { public abstract void PrePareEx(); // 實驗前的準備工作 public abstract void PourReagent(); // 加入氫氧化鋇 public abstract void PourCarbon(); // 加入二氧化碳 public abstract void ShowResult(); // 展示實驗結(jié)果 }由于抽象類定義了系列抽象方法子類如果不實現(xiàn)就會編譯報錯從語言層面杜絕了漏做某個步驟導(dǎo)致實驗失敗的可能——這正是建造者模式防止屬性/步驟遺漏的機制。兩個具體學(xué)生繼承該基類并各自實現(xiàn)步驟StudentA.cs通入少量二氧化碳結(jié)果出現(xiàn)了沉淀StudentB.cs通入大量二氧化碳結(jié)果出現(xiàn)沉淀后又消失了。指揮者老師 Teacher.cs 持有抽象Student通過構(gòu)造器注入后按固定順序指導(dǎo)實驗class Teacher { private Student student; public Teacher(Student student) { this.student student; } //老師指導(dǎo)學(xué)生實驗 public void DirectExperiment() { student.PrePareEx(); student.PourReagent(); student.PourCarbon(); student.ShowResult(); } }客戶端同樣只需替換具體學(xué)生即可切換實驗結(jié)果Program.csStudent studentA new StudentA(); Teacher teacher new Teacher(studentA); teacher.DirectExperiment(); // 輸出出現(xiàn)了沉淀 teacher new Teacher(new StudentB()); teacher.DirectExperiment(); // 輸出出現(xiàn)沉淀后又消失了實驗流程完全一致僅僅替換具體建造者就得到了不同的實驗結(jié)果——也就是改變產(chǎn)品的內(nèi)部表示試劑添加量只需要再定義一個具體建造者的直接證明。四、建造者模式 VS 工廠模式同門不同道建造者模式與工廠模式都屬于創(chuàng)建型模式目的都是得到一個對象但側(cè)重點截然不同詳見 README.md 的對比章節(jié)對比維度工廠模式建造者模式側(cè)重點將對象的實例化延遲到子類保持對象創(chuàng)造過程的穩(wěn)定性產(chǎn)品表象創(chuàng)建相同表象的對象在固定步驟下得到多種表象的實例與客戶端的關(guān)系都隔離了創(chuàng)建過程都隔離了創(chuàng)建過程選擇依據(jù)面包烤制柜臺只需向工廠拿同一類面包化學(xué)實驗步驟相同但結(jié)果不同文檔用兩個生活化例子做了精辟類比面包的烤制只是創(chuàng)建了很多同種類型的面包柜臺只需向工廠拿面包即可而化學(xué)實驗則側(cè)重于得到不同表象、也就是實驗結(jié)果不同的情況。因此當需要固定流程但希望產(chǎn)出多樣產(chǎn)品時應(yīng)選擇建造者模式。此外建造者模式是多態(tài)性使用的絕佳載體Teacher/Director面對的是抽象的Student/Builder接口運行時傳入哪個具體實現(xiàn)就產(chǎn)出哪種產(chǎn)品擴展新學(xué)生/新建造者完全不需要改動指揮者代碼。五、適用場景與無 Director 變體1. 適用場景判定建造者模式可以說是對流程的抽象當出現(xiàn)以下兩種情況時適合使用README.md 小結(jié)創(chuàng)建復(fù)雜對象的算法應(yīng)該獨立于該對象的組成部分以及它們的組裝方式把構(gòu)造算法收斂到 Director 中部件與組裝互不影響構(gòu)造過程必須允許被構(gòu)造的對象有不同的表示步驟固定、輸出可變強調(diào)對象的差異性。同時它還有兩個實用的副作用用途把構(gòu)造對象的實例邏輯轉(zhuǎn)移到類外面去在這個類的外部定義其構(gòu)造邏輯當某個類包含大量方法、規(guī)模過大時可用建造者模式拆分構(gòu)造職責當只能按部就班地獲取構(gòu)造方法所需要的參數(shù)時參數(shù)依賴前置步驟建造者天然契合這種順序化構(gòu)造場景。2. 無 Director 的建造者模式變體在構(gòu)造步驟算法比較少的情況下可以采用無 Director 的建造者模式由客戶端直接調(diào)用具體建造者的各步驟方法。這樣做雖然增加了客戶端對具體構(gòu)建過程的依賴性但是可以降低程序復(fù)雜性。文檔明確提示在實際項目應(yīng)用中應(yīng)該靈活運用而不是教條式地套用模板——例如當流程只有兩三個固定步驟且產(chǎn)品變體很少時直接讓客戶端驅(qū)動 Builder 反而更清爽。六、模式優(yōu)點與開放-封閉原則建造者模式的核心優(yōu)點原文四點在源碼中均有印證客戶端與產(chǎn)品細節(jié)解耦客戶端不必知道產(chǎn)品內(nèi)部組成的具體細節(jié)產(chǎn)品本身與創(chuàng)建過程解耦相同的創(chuàng)建過程可以創(chuàng)建出不同的產(chǎn)品對象——對應(yīng)Director.Construct()用同一算法產(chǎn)出 ProductA/ProductB具體建造者相互獨立、易于替換與擴展每個具體建造者相對獨立替換或新增具體建造者即可得到不同產(chǎn)品——對應(yīng)StudentA/StudentB的即插即用創(chuàng)建過程精細可控將復(fù)雜產(chǎn)品的創(chuàng)建步驟分解在不同方法中過程清晰、便于程序控制——對應(yīng)PrePareEx → PourReagent → PourCarbon → ShowResult的顯式步驟拆分符合開放-封閉原則增加新的具體建造者不用修改原類庫代碼指揮者類針對抽象建造者類編程系統(tǒng)擴展方便——新增一個StudentC只需繼承Student實現(xiàn)四個方法Teacher與客戶端零改動。七、小結(jié)建造者模式的價值在于它把對象的構(gòu)造算法從對象的部件與組裝方式中徹底剝離用指揮者鎖定流程、用多態(tài)換取差異。在 Unity3DTraining 倉庫中BuilderPattern 工程通過 Product/Director/Builder 的經(jīng)典形態(tài)與 Teacher/Student 的教學(xué)形態(tài)完整演示了從角色劃分、源碼實現(xiàn)到客戶端調(diào)用的全過程。參考代碼可直接閱讀 Program.cs 入口結(jié)合 README.md 的對比與小結(jié)即可在復(fù)雜對象構(gòu)建、多步驟流程組裝等場景中靈活取舍帶 Director與無 Director兩種形態(tài)做到知其然更知其所以然。贊分享示例工程【免費下載鏈接】Unity3DTraining【Unity雜貨鋪】unity大雜燴~項目地址https://gitcode.com/gh_mirrors/un/Unity3DTraining點擊查看免費下載相關(guān)推薦Swift建造者模式一步步構(gòu)建復(fù)雜的DeathStar對象 ?Swift建造者模式是一種強大的設(shè)計模式專門用于創(chuàng)建復(fù)雜對象。通過分離對象的構(gòu)造過程與其表示建造者模式讓你能夠使用相同的構(gòu)建過程創(chuàng)建不同的對象表現(xiàn)。本文將詳示例工程提升開發(fā)效率10倍repository-harness CLI命令實用指南提升開發(fā)效率10倍repository harness CLI命令實用指南 repository harness是一款能將任何代碼倉庫轉(zhuǎn)換為適用于ClaudeUrsinaPython游戲開發(fā)的極簡主義革命UrsinaPython游戲開發(fā)的極簡主義革命 在Python生態(tài)中游戲開發(fā)一直被視為相對薄弱的領(lǐng)域——直到Ursina的出現(xiàn)。這款基于Panda3D的3D上一篇WebPShop為Photoshop用戶提供專業(yè)級WebP格式支持插件下一篇F′ 框架中的 Drv::Udp 組件基于 UDP 的字節(jié)流驅(qū)動實現(xiàn)與實戰(zhàn)指南創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考