02/06 軟件設計模式

目錄

一.創建型模式

抽象工廠 Abstract Factory

構建器 Builder

工廠方法 Factory Method

原型 Prototype

單例模式? Singleton

二.結構型模式

適配器模式? Adapter

橋接模式? Bridge

組合模式? Composite

裝飾者模式? Decorator

外觀模式? Facade

享元模式? Flyweight

代理模式? Proxy

三.行為型模式?Behavioral Patterns

責任鏈模式 Chain of Responsibility?

命令模式 Command?

解釋器模式? Interpreter

迭代器模式 Iterator

中介者模式? Mediator

備忘錄模式? Memento

觀察者模式 Observer?

狀態模式? State

策略模式? Strategy

訪問者模式? Visitor


  • 定義:?設計模式是針對軟件設計中常見問題的可重用解決方案。

  • 作用:?提高代碼的可復用性、可維護性和可擴展性。

  • 分類:

    • 創建型模式:?關注對象的創建過程,例如:工廠方法模式、抽象工廠模式、單例模式等。

    • 結構型模式:?關注類和對象的組合方式,例如:適配器模式、裝飾器模式、代理模式等。

    • 行為型模式:?關注對象之間的通信和職責分配,例如:觀察者模式、策略模式、模板方法模式等。

一.創建型模式

記憶方式:“單身的工人抽煙,想著建筑的原因。”

(5種)單例,工廠,抽象工廠,構建器,原型


抽象工廠 Abstract Factory

旨在提供一個接口,用于創建一系列相關或相互依賴的對象,而無需指定它們的具體類。它允許客戶端代碼在不需要了解具體實現的情況下,這個模式通常用于需要創建多個相關對象的場景,尤其是在產品族的情況下。

  • (Abstract Factory):抽象工廠 - 定義創建產品對象的接口。
  • (Concrete Factory):具體工廠 - 實現抽象工廠接口,負責創建具體的產品對象。
  • (Abstract Product):抽象產品 - 定義產品的接口。
  • (Product):具體產品 - 實現抽象產品接口的具體類。

使用場景:

- 當系統需要獨立于其產品的創建、組合和表示時。

- 當系統需要使用多個系列的產品,而不需要依賴于具體的產品實現時。

- 當產品的具體類在運行時決定時。


構建器 Builder

旨在簡化復雜對象的構建過程。它通過將對象的構建過程與其表示分離,使得同樣的構建過程可以創建不同的表示。

  • Builder(建造者):定義創建一個產品所需的各個部件的抽象接口。
  • ConcreteBuilder(具體建造者):實現Builder接口,構建和裝配各個部件,提供一個方法來返回構建好的產品。
  • Director(指揮者):負責管理Builder的構建過程,調用具體建造者的方法來構建產品。
  • Product(產品):最終構建的復雜對象。

使用場景:

- 當一個對象的構建過程復雜,且需要多個步驟時。

- 構造過程必須允許已構建對象有不同表示。


工廠方法 Factory Method

定義一個創建對象的接口,讓子類決定實例化哪一個類。

  • 產品接口(Product):定義了工廠方法所創建的對象的接口。
  • 具體產品(ConcreteProduct):實現了Product產品接口的具體類。
  • 工廠接口(Creator):聲明了一個工廠方法,返回一個Product產品對象。
  • 具體工廠(ConcreteCreator):實現了工廠接口,返回具體產品的實例。

原型 Prototype

它允許通過復制現有的實例來創建新對象,而不是通過直接實例化類。這種模式特別適合于需要創建大量相似對象的場景,能夠提高性能并減少內存消耗。

  • 原型接口(Prototype):定義一個用于復制自身的接口。
  • 具體原型(ConcretePrototype):實現原型接口,提供具體的克隆方法。
  • 客戶端(Client):使用原型實例來創建新的對象。

使用場景

- 當一個類的實例化成本較高時,可以考慮使用原型模式。

- 當需要創建大量相似對象時,原型模式可以有效減少內存消耗。

- 當對象的狀態需要在運行時動態改變時,原型模式提供了靈活性。


單例模式? Singleton

確保一個類只有一個實例,并提供一個全局訪問點。將類的構造函數私有化,并提供一個靜態方法獲取唯一實例。

它常用于需要控制資源訪問的場景,比如數據庫連接、線程池等。

使用場景

- 需要控制資源的訪問,如數據庫連接、線程池等。

- 需要全局訪問的配置類。

- 需要在整個應用中共享的狀態。


二.結構型模式

該類模式主要用于如何組合已有的類和對象以獲得更大的結構,一般借鑒封裝,代理,繼承等概念講一個或多個類或對象進行組合,封裝,以提供同一的外部視圖或新的功能。

記憶:“外橋享組裝代”

適配器模式? Adapter

  • 問題:?需要將一個類的接口轉換成客戶端期望的另一個接口。

  • 解決方案:?創建一個適配器類,將目標接口轉換成適配者接口。

  • 記憶技巧:?適配器就像一個轉接頭,連接不兼容的接口。

  • 1. **目標接口(Target)**:客戶端所期待的接口。
  • 2. **適配者(Adaptee)**:需要被適配的類,通常是已有的類。
  • 3. **適配器(Adapter)**:實現目標接口,并持有一個適配者的實例,將目標接口的方法調用轉發給適配者。

使用場景

- 當你希望使用一些現有的類,但其接口不符合你的需求時。

- 當你想要創建一個可以與多個不兼容接口的類協同工作的系統時。


橋接模式? Bridge

通過將類的抽象部分與實現部分分離,使得二者可以獨立變化。它是一種對象結構型模式,又稱為柄體模式(Handle and Body )或接口模式(Interface)這個模式主要用于解決類的層次結構過于復雜的問題

  • 1. **抽象類(Abstraction)**:定義了抽象的接口,并維護一個指向Implementor實現的指針。
  • 2. **擴展抽象類(Refined Abstraction)**:由Abstraction軸向類定義,擴展了抽象類的功能。
  • 3. **實現類接口(Implementor)**:定義了實現部分的接口。這個接口不一定要和Abstraction的接口完全一致,可以完全不同,一把來說,Implementor接口僅提供基本操作,而Abstraction則定義了基于這些基本操作的較高層次的操作
  • 4. **具體實現類(Concrete Implementor)**:實現了實現類接口,提供具體的實現。

適用場景

- 當你需要在多個維度上擴展系統時。

- 當你希望避免在類的層次結構中產生過多的子類時。

- 當你希望在運行時動態切換實現時。


組合模式? Composite

它允許將對象組合成樹形結構以表示“部分-整體”的層次關系。組合模式使得客戶端對單個對象和組合對象的使用具有一致性。

  • 1. **組件(Component)**:定義了葉子和組合對象的共同接口。,所有的葉子節點和組合節點都需要實現這個接口。
  • 2. **葉子節點(Leaf)**:實現了組件Component接口,表示樹的葉子節點。它有自己的行為。
  • 3. **組合節點(Composite)**:實現了組件接口,能夠包含葉子和其他組合對象。它可以包含子節點(其他的葉子或組合節點),并實現了添加和刪除子節點的方法。

適用場景

- 當需要表示對象的部分-整體層次結構時。

- 當希望客戶端忽略組合對象和單個對象的差異時。


裝飾者模式? Decorator

問題:?需要動態地給一個對象添加一些額外的職責。

解決方案:?創建一個裝飾器類,包裝原始對象,并在保持原始對象接口的前提下提供額外的功能。裝飾器就像給蛋糕加奶油,可以不斷添加新的裝飾。

  • 組件接口(Component):定義一個對象接口,可以給這些對象動態地添加職責。
  • 具體組件(ConcreteComponent):實現了組件接口的具體對象,定義了被裝飾的對象。
  • 裝飾器(Decorator):持有一個組件對象的引用,并定義與組件接口一致的接口。
  • 具體裝飾器(ConcreteDecorator):擴展了裝飾器類,添加了額外的職責。

外觀模式? Facade

它為復雜的子系統提供一個統一的接口,使得子系統更易于使用。通過外觀模式,客戶端可以通過一個簡單的接口與復雜的系統進行交互,而不需要了解系統內部的復雜性。

外觀類(Facade):提供一個簡單的接口,封裝了復雜的子系統。

子系統類(Subsystem):實現具體的功能,通常包含多個類,外觀類通過這些類來完成具體的操作。

使用場景

- 當需要為復雜的子系統提供一個簡單的接口時。

- 當需要解耦客戶端與子系統之間的關系時。

- 當希望提高系統的可讀性和可維護性時。


享元模式? Flyweight

旨在通過共享對象來減少內存使用和提高性能。它特別適用于大量相似對象的場景。享元模式的核心思想是將對象的狀態分為兩部分:內部狀態和外部狀態。

內部狀態**:對象可以共享的狀態,通常是不可變的。多個對象可以共享同一個內部狀態。

外部狀態**:對象特有的狀態,通常是可變的。外部狀態在使用對象時傳遞給對象。

  • Flyweight:享元接口,定義了需要實現的方法。
  • ConcreteFlyweight:具體享元類,實現了Flyweight接口,包含內部狀態。
  • FlyweightFactory:享元工廠,負責創建和管理享元對象,確保共享相同的對象。

使用場景:

當應用程序需要大量相似對象時。

當對象的創建和管理成本較高時。

當需要減少內存使用時。


代理模式? Proxy

  • 問題:?需要控制對某個對象的訪問,或者需要在訪問對象時執行一些額外的操作。

  • 解決方案:?創建一個代理類,代表原始對象,并在訪問原始對象之前或之后執行一些操作。代理就像一個中介,控制對真實對象的訪問

  • 主題接口(Subject):定義了代理和真實對象的共同接口。
  • 真實主題(RealSubject)**:實現了主題接口,定義了代理所代表的真實對象。
  • 代理 Proxy:持有對真實主題的引用,并實現了主題接口,控制對真實主題的訪問。

代理模式通常用于以下幾種情況:

1. **遠程代理**:為一個對象在不同地址空間提供局部代表。

2. **虛擬代理**:根據需要創建開銷較大的對象,延遲對象的創建。

3. **保護代理**:控制對原始對象的訪問,提供不同的訪問權限。

使用場景

-對象創建開銷很大

- **網絡請求**:在網絡請求中,代理可以用于緩存響應,減少網絡延遲。

- **權限控制**:在訪問敏感數據時,代理可以檢查用戶權限。

- **資源管理**:在處理大對象時,代理可以延遲加載,優化性能。


三.行為型模式?Behavioral Patterns

該類模式主要用于對象之間的職責及其提供的服務的分配,它不僅描述對象或類的模式,還描述了他們之間的通信模式,特別是描述一組對等的對象怎樣相互協作以完成其中任一對象都無法單獨完成的任務。

記憶:10種

責命解,迭中備,觀狀策,訪搞定。

  • 責命解:責任鏈、命令、解釋器。

  • 迭中備:迭代器、中介者、備忘錄。

  • 觀狀策:觀察者、狀態、策略。

  • 訪搞定:訪問者搞定一切!

責任鏈模式 Chain of Responsibility?

它允許將請求的發送者和接收者解耦,使多個對象都有機會處理請求。創建一個對象鏈,每個對象依次嘗試處理請求,直到某個對象處理成功為止。

  • 1. **Handler(處理者)**: 定義一個處理請求的接口,并實現鏈中的處理邏輯。
  • 2. **ConcreteHandler(具體處理者)**: 實現Handler接口,處理請求或將請求傳遞給下一個處理者。
  • 3. **Client(客戶端)**: 創建具體處理者并設置鏈的順序,發送請求。

工作原理

1. 客戶端創建多個處理者,并將它們連接成一條鏈。

2. 客戶端發送請求,鏈中的處理者依次檢查是否能夠處理該請求。

3. 如果某個處理者能夠處理請求,則執行相應的處理邏輯;如果不能,則將請求傳遞給鏈中的下一個處理者。

應用場景:審批流程、異常處理、事件處理等。


命令模式 Command?

  • 目的:將請求封裝為對象,使得可以用不同的請求對客戶進行參數化。

  • 核心思想:將“操作”抽象為對象,支持撤銷、重做、日志記錄等功能。

  • 1. **命令接口(Command)**:定義一個執行操作的接口。
  • 2. **具體命令(ConcreteCommand)**:實現命令接口,定義與接收者之間的綁定關系,并調用接收者的相應操作。
  • 3. **接收者(Receiver)**:知道如何實施與執行一個請求相關的操作。
  • 4. **調用者(Invoker)**:負責調用命令對象來執行請求。
  • 5. **客戶端(Client)**:創建具體命令對象并設置接收者。
  • 應用場景:GUI 按鈕操作、任務隊列、事務管理等。

解釋器模式? Interpreter

  • 目的:定義語言的文法規則,并解釋執行語言中的句子。

  • 核心思想:將語言中的每個符號映射為一個類,通過組合這些類來解析和執行語言。

  • 應用場景:正則表達式解析、數學公式計算、編譯器設計等。

  • 1. 抽象表達式(AbstractExpression):定義一個解釋操作的接口,所有具體表達式都需要實現這個接口。
  • 2. 終結符表達式(TerminalExpression):實現了抽象表達式接口,表示文法中的基本元素。通常是一些簡單的語法規則。
  • 3. 非終結符表達式(NonTerminalExpression):同樣實現了抽象表達式接口,表示文法中的復雜結構,由多個終結符和非終結符組合而成。
  • 4. 上下文(Context):包含了在解釋過程中需要的一些信息,通常是輸入的字符串或其他數據。

工作原理

解釋器模式的核心思想是將一個復雜的表達式分解為多個簡單的表達式,然后通過遞歸的方式來解釋這些表達式。

假設我們需要解析一個簡單的數學表達式,比如加法和減法。我們可以定義以下結構:

- **抽象表達式**:`Expression` 接口,定義 `interpret(Context context)` 方法。

- **終結符表達式**:`NumberExpression` 類,表示數字。

- **非終結符表達式**:`AddExpression` 和 `SubtractExpression` 類,分別表示加法和減法。

具體步驟如下:

1. **定義文法**:首先需要定義要解析的語言的文法規則。

2. **構建表達式樹**:根據文法規則構建一個表達式樹,樹的每個節點都是一個表達式。

3. **解釋表達式**:通過遍歷表達式樹,調用每個節點的解釋方法,最終得到結果。

使用場景(適用于特定的解析和執行需求)

- 需要系統要能應對“”自定義“”內容的解析。

- 需要解析和執行簡單的語言或表達式。

- 需要對復雜的文法進行處理。

- 需要在運行時動態地解釋和執行代碼。


迭代器模式 Iterator

  • 目的:提供一種方法順序訪問一個聚合對象中的各個元素,而不暴露其內部表示。

  • 核心思想:將遍歷邏輯從聚合對象中分離出來,封裝到一個獨立的迭代器對象中。

  • 應用場景:集合類的遍歷(如列表、樹、圖等)。

  • 1. **迭代器(Iterator)**:定義了訪問和遍歷元素的接口。
  • 2. **具體迭代器(Concrete Iterator)**:實現了迭代器接口,負責遍歷具體集合的元素。
  • 3. **聚合(Aggregate)**:定義了創建迭代器的接口。
  • 4. **具體聚合(Concrete Aggregate)**:實現了聚合接口,返回一個具體的迭代器。

中介者模式? Mediator

  • 目的:用一個中介對象來封裝一系列對象之間的交互,降低對象之間的耦合度。

  • 核心思想:將對象之間的直接通信改為通過中介者間接通信。

  • 應用場景:聊天室、事件調度系統、GUI 組件交互等。

  • 1. **中介者接口(Mediator)**:定義了與各個同事對象交互的方法。
  • 2. **具體中介者(ConcreteMediator)**:實現中介者接口,維護對各個同事對象的引用,并協調它們之間的交互。
  • 3. **同事類(Colleague)**:各個參與者,它們通過中介者進行交互,而不是直接相互交互。

備忘錄模式? Memento

  • 目的:在不破壞封裝性的前提下,捕獲并外部化一個對象的內部狀態,以便以后恢復。

  • 核心思想:將對象的狀態保存到備忘錄對象中,并在需要時恢復。

  • 應用場景:撤銷操作、游戲存檔、事務回滾等。

這使得它在需要狀態管理的應用程序中非常有用。

  • 1. **Originator(發起人)**:需要保存其內部狀態的對象。它可以創建一個備忘錄來記錄當前狀態,并可以使用備忘錄恢復狀態。
  • 2. **Memento(備忘錄)**:用于存儲發起人的內部狀態。備忘錄通常是一個不可變的對象,外部對象無法直接訪問其內部狀態。
  • 3. **Caretaker(看護者)**:負責管理備忘錄的對象。看護者可以保存和恢復備忘錄,但不能修改備忘錄的內容。

使用場景

- 文本編輯器的撤銷/重做功能。

- 游戲中的狀態保存與加載。

- 任何需要保存和恢復對象狀態的場景。


觀察者模式 Observer?

  • 問題:?當一個對象的狀態發生改變時,需要通知其他對象,并且這些對象之間是松耦合的。

  • 解決方案:?定義一種一對多的依賴關系,當一個對象改變狀態時,所有依賴它的對象都會收到通知并自動更新。

  • 記憶技巧:?觀察者模式就像訂閱報紙,當有新報紙時,訂閱者會自動收到。

  • 1. **主題(Subject)**:被觀察的對象,維護觀察者的列表,并提供注冊、注銷觀察者的方法。
  • 2. **觀察者(Observer)**:依賴于主題的對象,當主題狀態變化時,觀察者會收到通知并進行相應的更新。
  • 3. **具體主題(Concrete Subject)**:實現了主題接口的具體類,包含狀態變化的邏輯。
  • 4. **具體觀察者(Concrete Observer)**:實現了觀察者接口的具體類,定義了在接收到通知時的行為。

狀態模式? State

  • 目的:允許對象在其內部狀態改變時改變其行為,使得對象看起來像是修改了它的類。

  • 核心思想:將狀態抽象為獨立的類,對象的行為隨狀態的變化而變化。

  • 應用場景:工作流系統、游戲角色狀態、訂單狀態管理等。

  • 1. **Context(上下文)**:持有一個狀態對象的引用,并且可以在運行時改變它的狀態。
  • 2. **State(狀態接口)**:定義一個接口,用于封裝與特定狀態相關的行為。
  • 3. **ConcreteState(具體狀態)**:實現狀態接口的具體狀態類,每個具體狀態類都實現了與該狀態相關的行為。

工作原理

- 上下文對象持有一個狀態對象的引用。

- 當上下文的狀態改變時,它會將狀態對象替換為另一個狀態對象。

- 每個狀態對象實現了狀態接口中的方法,定義了在該狀態下的具體行為。


策略模式? Strategy

定義了一系列算法,將每個算法封裝起來,并使它們可以互換。策略模式讓算法獨立于使用它的客戶端而變化。

  • 1. **策略接口(Strategy)**:定義一個公共接口,所有具體策略都需要實現這個接口。
  • 2. **具體策略(ConcreteStrategy)**:實現策略接口的具體算法。
  • 3. **上下文(Context)**:持有一個策略的引用,并可以在運行時選擇具體的策略。

使用場景

- 當你有多個算法可以選擇,并且希望在運行時選擇其中一個。

- 當你希望將算法的實現與使用算法的代碼分離。

- 當你需要避免使用大量的條件語句(如 `if-else` 或 `switch`)。


訪問者模式? Visitor

允許你在不改變對象結構的前提下,定義新的操作。這個模式的核心思想是將算法與對象結構分離,使得你可以在不修改對象的情況下,添加新的操作。適用于需要對一組對象執行多種操作的場景。

  • 1. **Visitor(訪問者)**: 定義了對每個元素的訪問操作。
  • 2. **Element(元素)**: 接受訪問者的訪問,通常是一個接口或抽象類。
  • 3. **ConcreteElement(具體元素)**: 實現了 Element 接口的具體類。
  • 4. **ObjectStructure(對象結構)**: 維護一組元素,并提供一個方法來允許訪問者訪問這些元素。

工作原理

- 訪問者模式通過在元素類中定義一個 `accept` 方法,接受一個訪問者對象。

- 訪問者對象實現了對每個具體元素的操作。

- 當訪問者訪問元素時,元素會調用訪問者的相應方法,從而實現對元素的操作。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/68004.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/68004.shtml
英文地址,請注明出處:http://en.pswp.cn/web/68004.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Idea ? Maven 選項

Idea ? Maven 選項 1. 在 Idea 項?上右鍵2. 選中 Maven 選項 如果在創建 Spring/Spring Boot 項?時,Idea 右側沒有 Maven 選項,如下圖所示: 此時可以使?以下?式解決。 1. 在 Idea 項?上右鍵 2. 選中 Maven 選項 選中 Maven 之后&#…

企業百科和品牌百科創建技巧

很多人比較困惑,創建百科詞條需要注意哪些事情?為什么參考提交了權威新聞參考資料還是沒有通過,下面小馬識途營銷顧問就為大家解答疑惑: 1、品牌詞以及企業詞提交 1)如果沒有詞條,我們可以通過平臺提供的急…

用Deepseek做EXCLE文件對比

背景是我想對比兩個PO系統里的一個消息映射,EDI接口的mapping有多復雜懂的都懂,它還不支持跨系統版本對比,所以我費半天勁裝NWDS,導出MM到excle,然后問題來了,我需要對比兩個excel文件里的內容,…

Agent開發注意事項

這里寫自定義目錄標題 llm應用開發什么是Agent?Agent1:工作流Agent2:自主AgentLLM如何擁有自主規劃能力? Tool 參考: llm應用開發 llm工程師需要具備以下能力: [] 軟件工程技能:將各個組件組裝在一起 [] 算法能力&am…

OpenCV:圖像輪廓

目錄 簡述 1. 什么是圖像輪廓? 2. 查找圖像輪廓 2.1 接口定義 2.2 參數說明 2.3 代碼示例 2.4 運行結果 3. 繪制圖像輪廓 3.1 接口定義 3.2 參數說明 3.3 代碼示例 3.4 運行結果 4. 計算輪廓周長 5. 計算輪廓面積 6. 示例:計算圖像輪廓的面…

在Mac mini M4上部署DeepSeek R1本地大模型

在Mac mini M4上部署DeepSeek R1本地大模型 安裝ollama 本地部署,我們可以通過Ollama來進行安裝 Ollama 官方版:【點擊前往】 Web UI 控制端【點擊安裝】 如何在MacOS上更換Ollama的模型位置 默認安裝時,OLLAMA_MODELS 位置在"~/.o…

CVPR | CNN融合注意力機制,蕪湖起飛!

**標題:**On the Integration of Self-Attention and Convolution **論文鏈接:**https://arxiv.org/pdf/2111.14556 **代碼鏈接:**https://github.com/LeapLabTHU/ACmix 創新點 1. 揭示卷積和自注意力的內在聯系 文章通過重新分解卷積和自…

module ‘matplotlib.cm‘ has no attribute ‘get_cmap‘

目錄 解決方法1: 解決方法2,新版api改了: module matplotlib.cm has no attribute get_cmap 報錯代碼: cmap matplotlib.cm.get_cmap(Oranges) 解決方法1: pip install matplotlib3.7.3 解決方法2,新版…

使用Nuxt.js實現服務端渲染(SSR):提升SEO與性能的完整指南

使用Nuxt.js實現服務端渲染(SSR):提升SEO與性能的完整指南 使用Nuxt.js實現服務端渲染(SSR):提升SEO與性能的完整指南1. 服務端渲染(SSR)核心概念1.1 CSR vs SSR vs SSG1.2 SSR工作原…

解釋 Java 中的反射機制和動態代理的原理?

反射機制是Java語言的一個特性,它允許程序在運行時檢查和操作類、方法、字段等。 通過反射,我們可以在運行時獲取類的信息,創建對象,調用方法和訪問字段,即使這些信息在編譯時是未知的。 反射的基本用法 import jav…

http狀態碼:504 Gateway Timeout(網關超時)的原有以及排查問題的思路

504 Gateway Timeout(網關超時) 是一種常見的HTTP錯誤狀態碼,表示服務器作為網關或代理時,未能及時從上游服務器收到響應。以下是它的原因和排查問題的思路: 1. 504錯誤的含義 定義:服務器作為網關或代理時…

Linux 安裝 RabbitMQ

Linux下安裝RabbitMQ 1 、獲取安裝包 # 地址 https://github.com/rabbitmq/erlang-rpm/releases/download/v21.3.8.9/erlang-21.3.8.9-1.el7.x86_64.rpm erlang-21.3.8.9-1.el7.x86_64.rpmsocat-1.7.3.2-1.el6.lux.x86_64.rpm# 地址 https://github.com/rabbitmq/rabbitmq-se…

LOCAL_PREBUILT_JNI_LIBS使用說明

LOCAL_PREBUILT_JNI_LIBS使用說明 使用LOCAL_PREBUILT_JNI_LIBS,可用于控制APK集成時,其相關so的集成方式。 比如,用于將APK中的so,抽取出來。 LOCAL_PREBUILT_JNI_LIBS : \lib/arm64-v8a/libNativeCore.so \lib/arm64-v8a/liba…

Java中的object類

1.Object類是什么? 🟪Object 是 Java 類庫中的一個特殊類,也是所有類的父類(超類),位于類繼承層次結構的頂端。也就是說,Java 允許把任何類型的對象賦給 Object 類型的變量。 🟦Java里面除了Object類,所有的…

uniapp小程序自定義中間凸起樣式底部tabbar

我自己寫的自定義的tabbar效果圖 廢話少說咱們直接上代碼,一步一步來 第一步: 找到根目錄下的 pages.json 文件,在 tabBar 中把 custom 設置為 true,默認值是 false。list 中設置自定義的相關信息, pagePath&#x…

四、GPIO中斷實現按鍵功能

4.1 GPIO簡介 輸入輸出(I/O)是一個非常重要的概念。I/O泛指所有類型的輸入輸出端口,包括單向的端口如邏輯門電路的輸入輸出管腳和雙向的GPIO端口。而GPIO(General-Purpose Input/Output)則是一個常見的術語&#xff0c…

vscode+CMake+Debug實現 及權限不足等諸多問題匯總

環境說明 有空再補充 直接貼兩個json tasks.json {"version": "2.0.0","tasks": [{"label": "cmake","type": "shell","command": "cmake","args": ["../"…

【Elasticsearch】post_filter

post_filter是 Elasticsearch 中的一種后置過濾機制,用于在查詢執行完成后對結果進行過濾。以下是關于post_filter的詳細介紹: 工作原理 ? 查詢后過濾:post_filter在查詢執行完畢后對返回的文檔集進行過濾。這意味著所有與查詢匹配的文檔都…

《數據可視化新高度:Graphy的AI協作變革》

在數據洪流奔涌的時代,企業面臨的挑戰不再僅僅是數據的收集,更在于如何高效地將數據轉化為洞察,助力決策。Graphy作為一款前沿的數據可視化工具,憑借AI賦能的團隊協作功能,為企業打開了數據協作新局面,重新…

Vue 2 與 Vue 3 的主要區別

Vue.js 是一個流行的前端框架,用于構建用戶界面和單頁應用。自從 Vue 2 發布以來,社區對其進行了廣泛的應用和擴展,而 Vue 3 的發布則帶來了許多重要的改進和新特性。 性能提升 Vue 3 在響應式系統上進行了重大的改進,采用了基于…