<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] ## 1,面向對象 ***** | 痛點??????? | 開源解決方案??? | 實現流程???? | 參考地址?? | 基礎知識?? |? | :-------- | :------- | :------- | :---- |:---- | | 性能開銷大??? | Guava緩存?? | LoadingCache | Guava LoadingCache | Java、集合|??????? |???????? | Reactor???? | Flux/Mono | Reactor 教程| Java、Lambda| | 可移植性差?? | Thrift????? | IDL定義->編譯 | Thrift 教程? | 數據序列化| |???????? | Protobuf?? | .proto定義->編譯? | Protobuf 語法| 數據序列化| | 調試困難??? | GDB???? | 斷點設置???? | GDB調試教程 | C/C++|? |???????? | Valgrind | Memcheck檢測?? | Valgrind 教程| C/C++|??????? | 設計難度大?? | 23種設計模式| 工廠模式等??? | 設計模式之禪 | 面向對象理論|??? |版本升級難|Spring MVC + Vue| REST API | Spring MVC 教程 | Spring、Vue| |???????? |Swagger?? | Swagger Doc?? | Swagger 教程 | OpenAPI規范| |分布式不友好? |Dubbo???????? | XML/Java配置?? | Dubbo用戶手冊| Java、網絡編程|??????? |???????? |Spring Cloud | 服務注冊/調用? | Spring Cloud教程| Spring、網絡編程 |? |理論不完備?? |C# 多重繼承?? | : base class1,class2| C# 多重繼承| C#、面向對象| |???????? | Rust Trait? | trait定義???? | Rust Trait教程| Rust語言| ### 1.1, 23 種設計模式 #### 1.1.1, 創建型模式: - ##### 1.工廠方法模式: 定義一個用于創建對象的接口,讓子類決定要實例化的類。工廠方法讓類的實例化推遲到子類。 - ##### 2.抽象工廠模式: 提供一個接口用于創建相關或相互依賴的對象組,而無需指定它們具體的類。 - ##### 3.建造者模式: 將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 - ##### 4.原型模式: 用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象。 - ##### 5.單例模式: 保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。 |模式|應用場景|通俗解釋|模式代碼實現參考地址|? |:--:|:--:|:--:|:--:| |工廠方法模式|定義一個用于創建對象的接口,讓子類決定要實例化的類|汽車工廠生產不同品牌的汽車|[https://www.runoob.com/design-pattern/factory-method-pattern.html](https://www.runoob.com/design-pattern/factory-method-pattern.html)| |抽象工廠模式|提供一個接口用于創建相關或相互依賴的對象組,而無需指定它們具體的類|生產兼容的硬件設備|[https://www.runoob.com/design-pattern/abstract-factory-pattern.html](https://www.runoob.com/design-pattern/abstract-factory-pattern.html)|? |建造者模式|將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示|房地產項目|[https://www.runoob.com/design-pattern/builder-pattern.html](https://www.runoob.com/design-pattern/builder-pattern.html) |原型模式|用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象|通過一個中心商店制造產品的副本|[https://www.runoob.com/design-pattern/prototype-pattern.html](https://www.runoob.com/design-pattern/prototype-pattern.html)| |單例模式|保證一個類僅有一個實例,并提供一個訪問它的全局訪問點|Windows的任務管理器|[https://www.runoob.com/design-pattern/singleton-pattern.html](https://www.runoob.com/design-pattern/singleton-pattern.html)| #### 1.1.2, 結構型模式: - ##### 6.適配器模式: 將一個類的接口轉換成客戶希望的另外一個接口。適配器讓原本由于接口不兼容而不能一起工作的那些類可以一起工作。 - ##### 7.橋接模式: 將抽象與實現分離,使得兩者可以獨立變化。 - ##### 8.裝飾器模式: 動態地將責任附加到對象上。若要擴展功能,裝飾器提供了比繼承更為靈活的替代方案。 - ##### 9.組合模式: 將對象組合成樹形結構以表示“部分-整體“的層次結構。組合使得用戶對單個對象和組合對象的使用具有一致性。 - ##### 10.外觀模式: 為子系統中的一組接口提供一個一致的界面,外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。 - ##### 11.享元模式: 使用共享對象可有效地支持大量細粒度的對象。 - ##### 12.代理模式: 為其他對象提供一種代理以控制對這個對象的訪問。代理模式可以將代理對象與真實的服務對象進行分離,這樣在真實對象發生變化時,代理對象可以起到保護作用,并無需立即變化。 |模式|應用場景|通俗解釋|模式代碼實現參考地址| |:--:|:--:|:--:|:--:| |適配器模式|將一個類的接口轉換成客戶希望的另外一個接口|插頭轉接頭|[https://www.runoob.com/design-pattern/adapter-pattern.html](https://www.runoob.com/design-pattern/adapter-pattern.html)| |橋接模式|將抽象與實現分離,使得兩者可以獨立變化|遙控器和電視機|[https://www.runoob.com/design-pattern/bridge-pattern.html](https://www.runoob.com/design-pattern/bridge-pattern.html)| |裝飾器模式|動態地將責任附加到對象上|咖啡調料|[https://www.runoob.com/design-pattern/decorator-pattern.html](https://www.runoob.com/design-pattern/decorator-pattern.html)| |組合模式|將對象組合成樹形結構以表示“部分-整體“的層次結構|公司組織結構|[https://www.runoob.com/design-pattern/composite-pattern.html](https://www.runoob.com/design-pattern/composite-pattern.html)| |外觀模式|為子系統中的一組接口提供一個一致的界面|門面|[https://www.runoob.com/design-pattern/facade-pattern.html](https://www.runoob.com/design-pattern/facade-pattern.html)| |享元模式|使用共享對象可有效地支持大量細粒度的對象|字符串常量池|[https://www.runoob.com/design-pattern/flyweight-pattern.html](https://www.runoob.com/design-pattern/flyweight-pattern.html)| |代理模式|為其他對象提供一種代理以控制對這個對象的訪問|保險代理人|[https://www.runoob.com/design-pattern/proxy-pattern.html](https://www.runoob.com/design-pattern/proxy-pattern.html)| #### 1.1.3, 行為型模式: - ##### 13.責任鏈模式: 使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。 - #####14.命令模式: 將一個請求封裝為一個對象,從而使你可以用不同的請求參數ize方法執行請求。 - ##### 15.解釋器模式: 給定一個語言,定義它的文法的一種表示,并定義一個解釋器,該解釋器使用該表示來解釋語言中的句子。 - ##### 16.迭代器模式: 提供一種方法訪問一個容器對象中各個元素,而又不需暴露該對象的內部細節。 - ##### 17.中介者模式: 用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯示地相互引用,從而使其耦合松散。 - ##### 18.備忘錄模式: 在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態。 - ##### 19.觀察者模式: 定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新。 - ##### 20.狀態模式: 允許一個對象在其內部狀態改變時改變其行為。狀態模式主要解決的是當控制一個對象狀態的條件表達式過于復雜時的情況。 - ##### 21.策略模式: 定義一系列的算法,將每一個算法都封裝起來,使它們之間可以互相替換。 - ##### 22.模板方法模式: 在一個方法中定義一個算法的骨架,并將其某些步驟推遲到子類中。模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。 - ##### 23.訪問者模式: 表示一個作用于某對象結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。 |模式|應用場景|通俗解釋|模式代碼實現參考地址| |:--:|:--:|:--:|:--:| |責任鏈模式|多級請求處理|上級沒處理就傳給下級,下級沒處理再傳給再下級|[https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html](https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html)|? |命令模式|實現UNDO功能|類似遙控器,執行對應的命令|[https://www.runoob.com/design-pattern/command-pattern.html](https://www.runoob.com/design-pattern/command-pattern.html)| |解釋器模式|編譯器的解析器|編譯原理中的解釋器|[https://www.runoob.com/design-pattern/interpreter-pattern.html](https://www.runoob.com/design-pattern/interpreter-pattern.html)| |迭代器模式|訪問容器內元素|遍歷容器|[https://www.runoob.com/design-pattern/iterator-pattern.html](https://www.runoob.com/design-pattern/iterator-pattern.html)|??? |中介者模式|解耦|roducer和Consumer通過中間人Mediator聯系|[https://www.runoob.com/design-pattern/mediator-pattern.html%7C](https://www.runoob.com/design-pattern/mediator-pattern.html%7C) |備忘錄模式|實現撤銷操作|游戲存檔|[https://www.runoob.com/design-pattern/memento-pattern.html](https://www.runoob.com/design-pattern/memento-pattern.html)|? |觀察者模式|事件處理|推送服務,郵件列表訂閱|[https://www.runoob.com/design-pattern/observer-pattern.html%7C](https://www.runoob.com/design-pattern/observer-pattern.html%7C) |狀態模式|狀態變化引起行為改變|人生的不同階段,狀態不同,行為也不同|[https://www.runoob.com/design-pattern/state-pattern.html](https://www.runoob.com/design-pattern/state-pattern.html)|? |策略模式|算法可變|計算器的加減乘除算法可替換|[https://www.runoob.com/design-pattern/strategy-pattern.html](https://www.runoob.com/design-pattern/strategy-pattern.html)|? |模板方法模式|算法固定的流程,某些步驟可變|做飯的流程大致相同,某些細節可變|[https://www.runoob.com/design-pattern/template-method-pattern.html](https://www.runoob.com/design-pattern/template-method-pattern.html)|??? |訪問者模式|對象結構中的元素的操作|出入境管理中人員行為的檢查|[https://www.runoob.com/design-pattern/visitor-pattern.html](https://www.runoob.com/design-pattern/visitor-pattern.html)| 5. JDK中的設計模式: |模式|示例| |:--:|:--:| |工廠模式|java.util.Calendar#getInstance()| |單例模式|java.lang.Runtime#getRuntime()| |適配器模式|java.util.Arrays#asList()| |觀察者模式| java.util.Observable| |模板方法模式|java.util.Collections#sort()| |迭代器模式|java.util.Iterator| |組合模式|java.awt.Container#add(Component)| |代理模式|java.lang.reflect.Proxy| |裝飾者模式|java.io.InputStreamDecorator| |命令模式|java.lang.Runnable| 6. Spring中的設計模式: |模式|示例|? |:--:|:--:| |工廠模式|Objects.newInstance(“com.example.Example”, constructorArguments)| |單例模式|@Scope(“singleton”)| |適配器模式|HandlerAdapter|? |觀察者模式|ApplicationEventPublisher | |模板方法模式|@Transactional| |迭代器模式|iterate()| |組合模式|@ControllerAdvice|? |代理模式|AOP代理| |命令模式|@Scheduled| |裝飾者模式|FilteringSpringContextLoader| 7. 開發中的設計模式應用: |模式|示例| |:--:|:--:| |工廠模式|根據條件創建不同實例| |單例模式|logger,配置類 | |適配器模式|第三方接口適配|? |觀察者模式|事件驅動 | |模板方法模式|項目啟動模板| |迭代器模式|枚舉| |組合模式|樹形結構|? |代理模式|權限校驗| |命令模式|任務調度| |裝飾者模式|引入額外功能| ## 2,面向對象 VS 面向切面 ***** 1\. 面向切面像是在制定政策時考慮社會各階層的需求,**`Vs`** 面向對象像是在組織企業時按職能部門進行劃分。 2\. 面向切面強調解耦和重用但難以理解,像是政策制定要兼顧各方面但復雜難懂。**`Vs`** 面向對象簡單易懂但增加開銷,像是組織結構清晰但成本高。 3\. 面向切面實現難度高需要語言機制,**`Vs`** 面向對象理解簡單只需要掌握思想和設計模式。 4\. 面向切面可能導致過程混亂,**`Vs`** 面向對象可能導致設計過于復雜。 > | 對比維度?????? | 面向切面???????? | 面向對象??????? | 通俗表達?? | | :-------- | :------- | :------- | :---- | | 主要特性????? | 切面(Aspect)隔離橫切關注點| 類(Class)封裝對象結構與行為| 處理交叉的需求|??? |技術邊界???? | 容易導致程序流程混亂???? | 類之間高度耦合,設計難度較大|過程混亂 vs 復雜設計| |主要優點???? | 解耦合,提高模塊重用性?? | 封裝、繼承、多態方便擴展|靈活變化 vs 擴展方便|? |主要缺點???? | 調試困難,學習曲線陡峭?? | 性能開銷較大,獨立性降低|難理解 vs 開銷大| |實施難度???? | 較高,需要熟悉AOP理論??? | 較低,面向對象思想較為直觀|高深 vs 簡單易懂| |基礎條件????? | 語言支持AOP,Spring AOP等 | 面向對象語言,設計模式等|語言機制 vs 設計思想| |社會場景?? |政策制定:關注社會各階層|企業組織:按職能部門劃分|涉及多方 vs 標注職責| ## 3, 面向切面 ***** ### 面向切面編程的主要思想: 1. 把程序邏輯分解成不同的關注點`(concern)`,比如日志、安全、事務等。每一個關注點均作為一個模塊開發。 2. 定義橫切關注點`(cross-cutting concern),`這些關注點影響多個模塊。例如日志、安全和事務等。 3. 使用切面(aspect)模塊化這些橫切關注點。切面模塊具有切入點`(pointcut)`、通知`(advice)`等元素。 4. 在編譯階段或類加載階段,通過織入`(weaving)`將切面模塊與其他模塊結合,生成最終的程序。 ***使用場景:*** - 日志:用于記錄程序運行信息,在多個模塊中使用,可以抽取成切面。 - 安全:對用戶權限的判斷,在多個模塊中使用,可以抽取成切面。 - 事務:用于處理數據庫事務,在多個模塊中使用,可以抽取成切面。 - 性能統計:用于統計程序運行時間和次數,在多個模塊中使用,可以抽取成切面。 ***通俗社會應用場景表述:*** - 日志:編輯朋友圈或博客時,系統自動記錄操作日志,這是日志切面。 - 安全:登錄網站時,系統自動判斷用戶權限,這是安全切面。 - 事務:網上支付時,系統自動處理支付事務,這是事務切面。 - 性能統計:使用app時,系統自動統計app的啟動次數和使用時長,這是性能統計切面。 #### 面向切面編程的主要優點: * 提高模塊化:可以更好地抽離橫切關注點,使得每個模塊只關注自身的業務邏輯。 * 減低耦合度:通過橫切關注點的隔離,每個模塊只依賴于自己的業務,不需要依賴其他模塊的實現細節。 * 提高重用性:橫切關注點本身具有一定的通用性,可以重用。 * 更靈活的程序結構:通過織入,可以更動態和靈活地構建程序結構。 #### 面向切面編程的主要缺點: * 提高系統的復雜度:需要額外學習面向切面編程的概念和開發技術,而且debug也比較復雜。 * 可能產生意外的切面互相作用:不同的切面可能在同一個切入點上定義通知,這可能產生意外的相互作用,需要加以注意。 * 可能產生性能開銷:織入過程可能會產生一定的性能開銷,需要測試和評估
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看