設計模式全解析:23種經典設計模式及其應用

創建型模式

1. 單例模式(Singleton Pattern)

  • 核心思想:確保一個類只有一個實例,并提供一個全局訪問點。
  • 適用場景:需要共享資源的場景,如配置管理、日志記錄等。
public class Singleton {// 靜態變量保存單例實例private static Singleton instance;// 私有構造函數,防止外部實例化private Singleton() {}// 提供獲取實例的全局訪問點public static Singleton getInstance() {if (instance == null) { // 如果實例為空,則創建instance = new Singleton();}return instance; // 返回單例實例}
}

2. 工廠方法模式(Factory Method Pattern)

  • 核心思想:定義一個創建對象的接口,但由子類決定實例化哪一個類。
  • 適用場景:需要延遲到子類進行對象實例化時。
// 產品接口
interface Product {}// 具體產品類
class ConcreteProduct implements Product {}// 工廠接口
interface Creator {Product factoryMethod(); // 工廠方法,用于創建產品
}// 具體工廠類
class ConcreteCreator implements Creator {public Product factoryMethod() {return new ConcreteProduct(); // 返回具體產品實例}
}

3. 抽象工廠模式(Abstract Factory Pattern)

  • 核心思想:提供一個接口,創建一系列相關或依賴對象,而無需指定具體類。
  • 適用場景:需要創建一組相關或互相依賴的對象時。
// 抽象產品A
interface ProductA {}// 抽象產品B
interface ProductB {}// 具體產品A1
class ProductA1 implements ProductA {}// 具體產品B1
class ProductB1 implements ProductB {}// 抽象工廠接口
interface AbstractFactory {ProductA createProductA(); // 創建產品A的方法ProductB createProductB(); // 創建產品B的方法
}// 具體工廠1
class ConcreteFactory1 implements AbstractFactory {public ProductA createProductA() {return new ProductA1(); // 創建具體產品A1}public ProductB createProductB() {return new ProductB1(); // 創建具體產品B1}
}

4. 建造者模式(Builder Pattern)

  • 核心思想:將一個復雜對象的構建與其表示分離,使得同樣的構建過程可以創建不同的表示。
  • 適用場景:需要構建復雜對象時,且構建過程獨立于表示。
// 產品類
class Product {private String partA;private String partB;// 設置部件Apublic void setPartA(String partA) {this.partA = partA;}// 設置部件Bpublic void setPartB(String partB) {this.partB = partB;}
}// 建造者接口
interface Builder {void buildPartA(); // 構建部件Avoid buildPartB(); // 構建部件BProduct getResult(); // 獲取構建的產品
}// 具體建造者
class ConcreteBuilder implements Builder {private Product product = new Product();public void buildPartA() {product.setPartA("PartA"); // 設置產品的部件A}public void buildPartB() {product.setPartB("PartB"); // 設置產品的部件B}public Product getResult() {return product; // 返回構建的產品}
}

5. 原型模式(Prototype Pattern)

  • 核心思想:通過復制現有實例來創建新對象,避免重復初始化。
  • 適用場景:需要大量相似對象時。
// 原型類
class Prototype implements Cloneable {// 克隆方法public Prototype clone() throws CloneNotSupportedException {return (Prototype) super.clone(); // 調用父類的克隆方法}
}

結構型模式

6. 適配器模式(Adapter Pattern)

  • 核心思想:將一個類的接口轉換成客戶期望的另一個接口。
  • 適用場景:接口不兼容但需要協同工作的類。
// 目標接口
interface Target {void request();
}// 被適配的類
class Adaptee {void specificRequest() {// 特殊請求}
}// 適配器類
class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee = adaptee;}public void request() {adaptee.specificRequest(); // 轉發請求到被適配對象}
}

7. 橋接模式(Bridge Pattern)

  • 核心思想:將抽象部分與實現部分分離,使它們可以獨立變化。
  • 適用場景:需要跨越多個平臺的對象。
// 實現接口
interface Implementor {void operationImpl();
}// 具體實現類A
class ConcreteImplementorA implements Implementor {public void operationImpl() {// 具體實現}
}// 抽象類
abstract class Abstraction {protected Implementor implementor;protected Abstraction(Implementor implementor) {this.implementor = implementor;}public abstract void operation(); // 抽象方法
}// 擴展抽象類
class RefinedAbstraction extends Abstraction {public RefinedAbstraction(Implementor implementor) {super(implementor);}public void operation() {implementor.operationImpl(); // 調用實現方法}
}

8. 組合模式(Composite Pattern)

  • 核心思想:將對象組合成樹形結構以表示“部分-整體”的層次結構。
  • 適用場景:需要處理樹形結構數據時。
// 組件接口
interface Component {void operation();
}// 葉子節點
class Leaf implements Component {public void operation() {// 葉子節點的操作}
}// 組合節點
class Composite implements Component {private List<Component> children = new ArrayList<>();// 添加子節點public void add(Component component) {children.add(component);}public void operation() {for (Component child : children) {child.operation(); // 遞歸調用子節點的操作}}
}

9. 裝飾器模式(Decorator Pattern)

  • 核心思想:動態地給對象添加一些額外的職責。
  • 適用場景:需要擴展類的功能時。
// 組件接口
interface Component {void operation();
}// 具體組件
class ConcreteComponent implements Component {public void operation() {// 基本操作}
}// 裝飾器抽象類
abstract class Decorator implements Component {protected Component component;protected Decorator(Component component) {this.component = component;}public void operation() {component.operation(); // 調用被裝飾對象的操作}
}// 具體裝飾器
class ConcreteDecorator extends Decorator {public ConcreteDecorator(Component component) {super(component);}public void operation() {super.operation();// 添加額外的操作}
}

10. 外觀模式(Facade Pattern)

  • 核心思想:為子系統中的一組接口提供一個一致的界面。
  • 適用場景:簡化復雜系統的使用。
// 子系統A
class SubsystemA {void operationA() {// 子系統A的操作}
}// 子系統B
class SubsystemB {void operationB() {// 子系統B的操作}
}// 外觀類
class Facade {private SubsystemA subsystemA = new SubsystemA();private SubsystemB subsystemB = new SubsystemB();// 提供的統一接口void operation() {subsystemA.operationA(); // 調用子系統A的方法subsystemB.operationB(); // 調用子系統B的方法}
}

11. 享元模式(Flyweight Pattern)

  • 核心思想:運用共享技術有效地支持大量細粒度對象。
  • 適用場景:需要大量創建對象時,減少內存消耗。
// 享元類
class Flyweight {private String intrinsicState; // 內部狀態public Flyweight(String intrinsicState) {this.intrinsicState = intrinsicState;}// 操作方法,傳入外部狀態void operation(String extrinsicState) {// 使用內部狀態和外部狀態}
}// 享元工廠
class FlyweightFactory {private Map<String, Flyweight> flyweights = new HashMap<>();// 獲取享元對象public Flyweight getFlyweight(String key) {if (!flyweights.containsKey(key)) {flyweights.put(key, new Flyweight(key)); // 創建新享元對象}return flyweights.get(key); // 返回享元對象}
}

12. 代理模式(Proxy Pattern)

  • 核心思想:為其他對象提供一種代理,以控制對這個對象的訪問。
  • 適用場景:需要控制對象訪問權限時。
// 抽象主題
interface Subject {void request();
}// 真實主題
class RealSubject implements Subject {public void request() {// 真實請求的處理}
}// 代理類
class Proxy implements Subject {private RealSubject realSubject;public void request() {if (realSubject == null) {realSubject = new RealSubject(); // 延遲初始化}realSubject.request(); // 轉發請求}
}

行為型模式

13. 責任鏈模式(Chain of Responsibility Pattern)

  • 核心思想:避免請求發送者與接收者耦合,讓多個對象都有機會處理請求。
  • 適用場景:請求需要多個對象處理時。
// 處理者抽象類
abstract class Handler {protected Handler successor; // 后繼者// 設置后繼者public void setSuccessor(Handler successor) {this.successor = successor;}// 處理請求public abstract void handleRequest();
}// 具體處理者1
class ConcreteHandler1 extends Handler {public void handleRequest() {if (successor != null) {successor.handleRequest(); // 轉發請求}}
}

14. 命令模式(Command Pattern)

  • 核心思想:將請求封裝成對象,從而使你可用不同的請求對客戶進行參數化。
  • 適用場景:需要對請求排隊、日志、撤銷操作時。
// 命令接口
interface Command {void execute();
}// 具體命令
class ConcreteCommand implements Command {private Receiver receiver; // 命令的接收者public ConcreteCommand(Receiver receiver) {this.receiver = receiver;}public void execute() {receiver.action(); // 執行接收者的動作}
}// 接收者
class Receiver {void action() {// 執行動作}
}// 調用者
class Invoker {private Command command;// 設置命令public void setCommand(Command command) {this.command = command;}// 執行命令public void executeCommand() {command.execute();}
}

15. 解釋器模式(Interpreter Pattern)

  • 核心思想:為給定的語言定義文法表示,并定義一個解釋器來處理這個文法。
  • 適用場景:需要解釋一種語言時。
// 表達式接口
interface Expression {int interpret();
}// 數字表達式
class Number implements Expression {private int number;public Number(int number) {this.number = number;}public int interpret() {return number; // 返回數字的值}
}// 加法表達式
class Plus implements Expression {private Expression leftOperand;private Expression rightOperand;public Plus(Expression left, Expression right) {this.leftOperand = left;this.rightOperand = right;}public int interpret() {return leftOperand.interpret() + rightOperand.interpret(); // 返回加法結果}
}

16. 迭代器模式(Iterator Pattern)

  • 核心思想:提供一種方法順序訪問一個聚合對象中的各個元素,而不暴露其內部表示。
  • 適用場景:需要遍歷聚合對象時。
// 迭代器接口
interface Iterator {boolean hasNext(); // 是否有下一個元素Object next(); // 獲取下一個元素
}// 聚合接口
interface Aggregate {Iterator createIterator(); // 創建迭代器
}// 具體聚合類
class ConcreteAggregate implements Aggregate {private List<Object> items = new ArrayList<>();public Iterator createIterator() {return new ConcreteIterator(this); // 創建具體迭代器}
}// 具體迭代器
class ConcreteIterator implements Iterator {private ConcreteAggregate aggregate;private int index;public ConcreteIterator(ConcreteAggregate aggregate) {this.aggregate = aggregate;}public boolean hasNext() {return index < aggregate.items.size(); // 判斷是否有下一個元素}public Object next() {return aggregate.items.get(index++); // 返回下一個元素}
}

17. 中介者模式(Mediator Pattern)

  • 核心思想:用一個中介對象來封裝一系列對象的交互,使得對象之間不需要顯式地相互引用。
  • 適用場景:需要減少對象之間的依賴時。
// 中介者接口
interface Mediator {void notify(Component sender, String event); // 通知方法
}// 具體中介者
class ConcreteMediator implements Mediator {private Component1 component1;private Component2 component2;// 注冊組件1public void registerComponent1(Component1 component) {this.component1 = component;}// 注冊組件2public void registerComponent2(Component2 component) {this.component2 = component;}public void notify(Component sender, String event) {if (sender == component1 && event.equals("A")) {component2.doSomething(); // 組件1觸發事件A,組件2響應} else if (sender == component2 && event.equals("B")) {component1.doSomething(); // 組件2觸發事件B,組件1響應}}
}// 組件抽象類
abstract class Component {protected Mediator mediator;public Component(Mediator mediator) {this.mediator = mediator;}
}// 組件1
class Component1 extends Component {public Component1(Mediator mediator) {super(mediator);}public void doSomething() {mediator.notify(this, "A"); // 執行操作并通知中介者}
}// 組件2
class Component2 extends Component {public Component2(Mediator mediator) {super(mediator);}public void doSomething() {mediator.notify(this, "B"); // 執行操作并通知中介者}
}

18. 備忘錄模式(Memento Pattern)

  • 核心思想:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態。
  • 適用場景:需要保存和恢復對象狀態時。
// 備忘錄類
class Memento {private String state; // 狀態public Memento(String state) {this.state = state;}public String getState() {return state; // 獲取狀態}
}// 原發器類
class Originator {private String state;public void setState(String state) {this.state = state; // 設置狀態}public Memento saveStateToMemento() {return new Memento(state); // 保存狀態到備忘錄}public void getStateFromMemento(Memento memento) {state = memento.getState(); // 從備忘錄恢復狀態}
}// 管理者類
class Caretaker {private List<Memento> mementoList = new ArrayList<>();public void add(Memento state) {mementoList.add(state); // 添加備忘錄}public Memento get(int index) {return mementoList.get(index); // 獲取備忘錄}
}

19. 觀察者模式(Observer Pattern)

  • 核心思想:定義對象間的一對多依賴關系,當一個對象狀態改變時,所有依賴它的對象都得到通知并被自動更新。
  • 適用場景:需要觀察對象狀態變化時。
// 觀察者接口
interface Observer {void update(String state); // 更新方法
}// 具體觀察者
class ConcreteObserver implements Observer {public void update(String state) {// 處理更新}
}// 主題類
class Subject {private List<Observer> observers = new ArrayList<>(); // 觀察者列表private String state;public void attach(Observer observer) {observers.add(observer); // 添加觀察者}public void setState(String state) {this.state = state;notifyAllObservers(); // 通知所有觀察者}private void notifyAllObservers() {for (Observer observer : observers) {observer.update(state); // 更新觀察者}}
}

20. 狀態模式(State Pattern)

  • 核心思想:允許對象在內部狀態改變時改變它的行為。對象看起來似乎修改了它的類。
  • 適用場景:對象狀態改變時行為也改變時。
// 狀態接口
interface State {void handle(Context context); // 處理方法
}// 具體狀態A
class ConcreteStateA implements State {public void handle(Context context) {context.setState(new ConcreteStateB()); // 轉換到狀態B}
}// 具體狀態B
class ConcreteStateB implements State {public void handle(Context context) {context.setState(new ConcreteStateA()); // 轉換到狀態A}
}// 上下文類
class Context {private State state;public Context(State state) {this.state = state; // 設置初始狀態}public void setState(State state) {this.state = state; // 設置狀態}public void request() {state.handle(this); // 請求處理}
}

21. 策略模式(Strategy Pattern)

  • 核心思想:定義一系列算法,把它們一個個封裝起來,并且使它們可互相替換。
  • 適用場景:需要動態選擇算法時。
// 策略接口
interface Strategy {void execute(); // 執行方法
}// 具體策略A
class ConcreteStrategyA implements Strategy {public void execute() {// 策略A的實現}
}// 具體策略B
class ConcreteStrategyB implements Strategy {public void execute() {// 策略B的實現}
}// 上下文類
class Context {private Strategy strategy;public Context(Strategy strategy) {this.strategy = strategy; // 設置初始策略}public void setStrategy(Strategy strategy) {this.strategy = strategy; // 設置策略}public void executeStrategy() {strategy.execute(); // 執行策略}
}

22. 模板方法模式(Template Method Pattern)

  • 核心思想:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。
  • 適用場景:多個類有相似算法時。
// 抽象類
abstract class AbstractClass {// 模板方法public final void templateMethod() {primitiveOperation1();primitiveOperation2();}// 基本操作1protected abstract void primitiveOperation1();// 基本操作2protected abstract void primitiveOperation2();
}// 具體類
class ConcreteClass extends AbstractClass {protected void primitiveOperation1() {// 實現基本操作1}protected void primitiveOperation2() {// 實現基本操作2}
}

23. 訪問者模式(Visitor Pattern)

  • 核心思想:將數據結構和作用于結構上的操作解耦,使得操作集合可獨立變化。
  • 適用場景:需要對對象結構中的對象實施多種操作時。
// 訪問者接口
interface Visitor {void visit(ElementA element);void visit(ElementB element);
}// 元素接口
interface Element {void accept(Visitor visitor); // 接受訪問者
}// 具體元素A
class ElementA implements Element {public void accept(Visitor visitor) {visitor.visit(this); // 接受訪問者}
}// 具體元素B
class ElementB implements Element {public void accept(Visitor visitor) {visitor.visit(this); // 接受訪問者}
}// 具體訪問者
class ConcreteVisitor implements Visitor {public void visit(ElementA element) {// 訪問元素A的操作}public void visit(ElementB element) {// 訪問元素B的操作}
}

總結

設計模式為我們提供了一種標準化的解決方案,可以應對軟件開發中常見的問題。通過理解和應用這些模式,我們可以編寫出更具可維護性、可擴展性和可重用性的代碼。希望這篇博客能幫助你更好地理解和使用設計模式。每種模式都有其獨特的應用場景,選擇合適的模式可以顯著提高代碼質量和開發效率。

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

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

相關文章

力扣熱題100題解(c++)—矩陣

73.矩陣置零 給定一個 m x n 的矩陣&#xff0c;如果一個元素為 0 &#xff0c;則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。 int m matrix.size(); // 行數int n matrix[0].size(); // 列數bool firstRowZero false; // 標記第一行是否包含 0bool f…

本地部署DeepSeek-R1(Dify升級最新版本、新增插件功能、過濾推理思考過程)

下載最新版本Dify Dify1.0版本之前不支持插件功能&#xff0c;先升級DIfy 下載最新版本&#xff0c;目前1.0.1 Git地址&#xff1a;https://github.com/langgenius/dify/releases/tag/1.0.1 我這里下載到老版本同一個目錄并解壓 拷貝老數據 需先停用老版本Dify PS D:\D…

PostSwigger Web 安全學習:CSRF漏洞3

CSRF 漏洞學習網站&#xff1a;What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy CSRF Token 基本原理 CSRF Token 是服務端生成的唯一、隨機且不可預測的字符串&#xff0c;用于驗證客戶端合法校驗。 作用&#xff1a;防止攻擊…

用 Nodemon 解決 npm run serve 頻繁重啟服務

Nodemon 是一個基于 Node.js 構建的開發工具&#xff0c;專為幫助開發者自動監控項目文件的更改而設計。每當文件發生變更時&#xff0c;Nodemon 會自動重啟 Node.js 服務器&#xff0c;無需手動停止并重啟。這對于提升開發速度、減少人工操作非常有幫助&#xff0c;尤其適用于…

django admin 中更新表數據 之后再將數據返回管理界面

在Django中&#xff0c;更新數據庫中的數據并將其重新顯示在Django Admin界面上通常涉及到幾個步驟。這里我將詳細說明如何在Django Admin中更新表數據&#xff0c;并確保更新后的數據能夠立即在管理界面上顯示。 定義模型 首先&#xff0c;確保你的模型&#xff08;Model&…

真.從“零”搞 VSCode+STM32CubeMx+C <1>構建

目錄 前言 準備工作 創建STM32CubeMx項目 VSCode導入項目&配置 構建錯誤調試 后記 前言 去年10月開始接觸單片機&#xff0c;一直在用樹莓派的Pico&#xff0c;之前一直用Micropython&#xff0c;玩的不亦樂乎&#xff0c;試錯階段優勢明顯&#xff0c;很快就能鼓搗一…

C語言學習之結構體

在C語言中&#xff0c;我們已經學了好幾種類型的數據。比如整型int、char、short等&#xff0c;浮點型double、float等。但是這些都是基本數據類型&#xff0c;而這些數據類型應用在實際編程里顯然是不夠用的。比如我們沒有辦法用一旦數據類型來定義一個”人“的屬性。因此這里…

架構-計算機系統基礎

計算機系統基礎 一、計算機系統組成 &#xff08;一&#xff09;計算機系統層次結構 硬件組成 主機&#xff1a;包含CPU&#xff08;運算器控制器&#xff09;、主存儲器&#xff08;內存&#xff09;。外設&#xff1a;輸入設備、輸出設備、輔助存儲器&#xff08;外存&…

【計算機網絡性能優化】從基礎理論到實戰調優

目錄 前言技術背景與價值當前技術痛點解決方案概述目標讀者說明 一、技術原理剖析核心概念圖解核心作用講解關鍵技術模塊說明技術選型對比 二、實戰演示環境配置要求核心代碼實現案例1&#xff1a;iPerf3帶寬測試案例2&#xff1a;TCP窗口優化案例3&#xff1a;QoS流量整形 運行…

Python 自動化辦公:Excel 數據處理的“秘密武器”

引言 在日常的 IT 辦公場景里&#xff0c;Excel 是數據處理與分析的 “常勝將軍”。無論是財務人員整理賬目、銷售團隊統計業績&#xff0c;還是運營人員分析用戶數據&#xff0c;Excel 都發揮著關鍵作用。但面對海量數據&#xff0c;手動操作 Excel 不僅效率低下&#xff0c;還…

緩存集群技術深度解析:從原理到實戰

緩存集群技術深度解析&#xff1a;從原理到實戰 一、緩存集群核心定位與架構選型 1. 集群模式核心價值 緩存集群通過數據分片、高可用保障、水平擴展解決單節點瓶頸&#xff0c;核心能力包括&#xff1a; 數據分片&#xff1a;將數據分散到多個節點&#xff0c;突破單節點內…

CSDN編輯文章時如何自動生成目錄

如何自動生成目錄 前置條件1. 插入目錄標識符2. 編寫標題層級 前置條件 需要使用markdown編輯&#xff0c;并且只有按照markdown語法編寫不同的標題級別&#xff0c;才能使用這個方法自動生成對應的目錄。 1. 插入目錄標識符 在文章的頂部添加以下代碼&#xff1a; [TOC](文…

產品經理對于電商接口的梳理||電商接口文檔梳理與接入

接口梳理7個注意點總結 ①注意要測試環境和生產環境。生產上線時候要提醒研發換到生產環境調用。 ②注意必輸字段和選輸字段&#xff0c;要傳入字段的含義和校驗。枚舉值不清楚含義的要詢問對方含義&#xff0c;比如說單據類型字段枚舉值是B2C發貨單&#xff0c;BBC發貨單&am…

更快的圖像局部修改與可控生成:Flex.2-preview

Flex.2-preview 文本生成圖像擴散模型介紹 一、模型簡介 Flex.2-preview 是一種 開源的 80 億參數文本生成圖像擴散模型&#xff0c;具備通用控制和修復支持功能&#xff0c;是 Flex.1alpha 的下一代版本。該模型由社區開發并為社區服務&#xff0c;采用 Apache 2.0 許可證&a…

【Castle-X機器人】一、模塊安裝與調試:機器人底盤

持續更新。。。。。。。。。。。。。。。 【ROS機器人】模塊安裝 一、Castle-X機器人底盤1.1 結構概述1.2 驅動執行結構1.3 環境傳感器1.4 電氣系統1.5 Castle-x機器人底盤測試激光雷達傳感器測試及數據可視化超聲波傳感器實時數據獲取防跌落傳感器測試陀螺儀測試鍵盤控制測試…

條件、列表渲染.

#### v-for 1. 渲染列表 vue <template> <ul v-for"(item,index) in list" > <li>{{ item }}</li> </ul> </template> <script setup> import { ref } from vue; let list ref([蘋果, 香蕉, 橙子]) </script>…

node20的安裝和vue的入門準備

一、node20的安裝 直接下載路徑&#xff1a;https://nodejs.org/download/release/v20.11.0/node-v20.11.0-x64.msi 安裝&#xff0c;雙擊msi文件 點擊同意協議 更改下載路徑 什么也不用選&#xff0c;點擊next進行下一步 什么也不用選&#xff0c;點擊next進行下一步 點擊安…

從 Java 到 Kotlin:在現有項目中遷移的最佳實踐!

全文目錄&#xff1a; 開篇語 1. 為什么選擇 Kotlin&#xff1f;1.1 Kotlin 與 Java 的兼容性1.2 Kotlin 的優勢1.3 Kotlin 的挑戰 2. Kotlin 遷移最佳實踐2.1 漸進式遷移2.1.1 步驟一&#xff1a;將 Kotlin 集成到現有的構建工具中2.1.2 步驟二&#xff1a;逐步遷移2.1.3 步驟…

威雅利電子|業界領先的高隔離度用于5G基站的吸收式SPDT開關“NT1819“

業界領先的高隔離度 用于5G基站的吸收式SPDT開關"NT1819" 為了實現智能社會&#xff0c;已經啟動了5G服務。這樣&#xff0c;高速、低延遲、大容量的數據通信成為可能&#xff0c;也給我們的生活和工業發展帶來了巨大的變化。 在5G基站有很多天線&#xff0c;每個天…

Diamond軟件的使用--(6)訪問FPGA的專用SPI接口

1.什么是FPGA的專用SPI接口&#xff1f; 此處的SPI FLASH接口即為FPGA的專用SPI接口&#xff0c;上電時&#xff0c;FPGA從該FLASH讀出程序并運行。 2.訪問SPI PROM需要注意哪些地方&#xff1f; 1&#xff09;處于MASTER SPI MODE 2&#xff09;調用USRMCLK原語&#xff0c;…