(二)原型模式

        原型的功能是將一個已經存在的對象作為源目標,其余對象都是通過這個源目標創建。發揮復制的作用就是原型模式的核心思想

一、源型模式的定義

        原型模式是指第二次創建對象可以通過復制已經存在的原型對象來實現,忽略對象創建過程中的其它細節。

?? 核心特點

  • 避免重復初始化操作(尤其是復雜對象)

  • 動態添加或刪除產品類

  • 隱藏對象創建的細節

其UML類圖如下所示:

類名作用
Client客戶端,通過原型接口克隆對象
Prototype抽象原型接口,聲明clone()方法
ConcretePrototypeA/B具體原型類,實現深拷貝邏輯

二、源型模式的適用場景

適用場景

  • 對象創建成本高(如數據庫查詢結果、復雜計算對象)

  • 需要動態配置的對象(如游戲中的敵人、武器生成)

  • 需要避免構造函數的約束(如深拷貝復雜對象)

不適用場景

  • 對象結構過于簡單(直接new更高效)

  • 需要強類型控制的場景

2.1、基礎實現

#include <iostream>
#include <memory>// 抽象原型類
class Prototype {
public:virtual ~Prototype() = default;virtual std::unique_ptr<Prototype> clone() const = 0; // 克隆方法virtual void print() const = 0;
};// 具體原型類A
class ConcretePrototypeA : public Prototype {
public:std::unique_ptr<Prototype> clone() const override {return std::make_unique<ConcretePrototypeA>(*this); // 調用拷貝構造}void print() const override {std::cout << "ConcretePrototypeA" << std::endl;}
};// 具體原型類B
class ConcretePrototypeB : public Prototype {
public:std::unique_ptr<Prototype> clone() const override {return std::make_unique<ConcretePrototypeB>(*this);}void print() const override {std::cout << "ConcretePrototypeB" << std::endl;}
};// 客戶端代碼
int main() {std::unique_ptr<Prototype> originalA = std::make_unique<ConcretePrototypeA>();std::unique_ptr<Prototype> cloneA = originalA->clone();cloneA->print(); // 輸出: ConcretePrototypeAstd::unique_ptr<Prototype> originalB = std::make_unique<ConcretePrototy

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

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

相關文章

Css實現懸浮對角線邊框動效

動畫效果展示 鼠標懸停時&#xff0c;一個帶有圓角的水綠色邊框會從右上和左下兩個方向快速展開&#xff0c;隨后顏色緩慢填充&#xff1b;移出鼠標時顏色先褪去&#xff0c;邊框再快速收縮消失&#xff0c;形成具有節奏感的呼吸式動畫。 &#x1f4dc; 動畫原理說明 一、核…

技術創新究竟包含什么?

技術創新指的是引入新技術或改進現有技術&#xff0c;以創造新穎且更優的產品、服務或流程的過程。它涉及應用科學和技術知識開發創新解決方案&#xff0c;以創造價值、提高效率、推動增長&#xff0c;并滿足用戶和客戶不斷變化的需求。 技術創新可以有多種形式&#xff0c;例…

ArcGIS+AI:涵蓋AI大模型應用、ArcGIS功能詳解、Prompt技巧、AI助力的數據處理、空間分析、遙感分析、二次開發及綜合應用等

&#x1f310; GIS憑借其強大的空間數據處理能力、先進的空間分析工具、靈活的地圖制作與可視化功能&#xff0c;以及廣泛的擴展性和定制性&#xff0c;已成為地理信息科學的核心工具。它在城市規劃、環境科學、交通管理等多個學科領域發揮著至關重要的作用。與此同時&#xff…

數據淘金時代:公開爬取如何避開法律雷區?

首席數據官高鵬律師團隊編著 一、“數字淘金熱”里的暗礁&#xff1a;那些被爬垮的平臺和賠哭的公司 前陣子某電商平臺的“商品比價爬蟲”上了熱搜&#xff0c;技術小哥本想靠抓競品數據優化定價&#xff0c;結果收到法院傳票——對方服務器被爬癱瘓&#xff0c;索賠300萬。這…

在ARM 架構的 Mac 上 更新Navicat到17后連接Oracle時報錯:未加載 Oracle 庫。

一&#xff1a;問題 使用的M1芯片的Mac&#xff0c;將Navicat更新到了17版本后&#xff0c;原本正常的Oracle數據庫無法連接&#xff0c;報錯&#xff1a;未加載 Oracle 庫。而sqlserver庫可以正常連接 二&#xff1a;解決方法 打開聚焦搜索——〉打開訪達——〉在應用程序中…

Springboot仿抖音app開發之用短視頻務模塊后端復盤及相關業務知識總結

Springboot仿抖音app開發之用戶業務模塊后端復盤及相關業務知識總結 BO類和VO類的區別 BO (Business Object) - 業務對象 定義: 業務對象是包含業務邏輯的領域模型用途: 主要用于封裝業務邏輯相關的數據&#xff0c;在業務層(Service層)之間傳遞特點: 與業務處理密切相關通常…

SQL-事務(2025.6.6-2025.6.7學習篇)

1、簡介 事務是一組操作的集合&#xff0c;它是一個不可分割的工作單位&#xff0c;事務會把所有的操作作為一個整體一起向系統提交或撤銷操作請求&#xff0c;即這些操作要么同時成功&#xff0c;要么同時失敗。 默認MySQL的事務是自動提交的&#xff0c;也就是說&#xff0…

《Ansys SIPI仿真技術筆記》 E-desk IBIS模型導入

技術筆記日期&#xff1a;20250611 00 背景和疑問 當在Circuit中準備載入IBIS時&#xff0c;工作界面會彈出如下界面&#xff1a; 那么具體Pin Import和Buffer Import有和區別&#xff1f; 何時該按哪個導入呢&#xff1f; 01 思考和記錄 1. Buffer Import VS Pin Import…

uniapp的請求封裝,如何避免重復提交請求

1、如何封裝uniapp&#xff0c;并且如何使用uniapp的封裝查看&#x1f449;uniapp請求封裝_uni-app-x 請求封裝-CSDN博客??????? 2、聲明一個請求記錄的緩存&#xff0c;代碼如下 // 存儲請求記錄 let requestRecords {}; // 重復請求攔截時間&#xff08;毫秒&#x…

【云原生】阿里云SLS日志自定義字段標簽實現日志告警

把業務日志接入到阿里云SLS日志服務后,我們想自定義字段做為標簽,在做日志告警的時候,可以做為查詢結果使用 自定義標簽 樣例: 一個典型的java log初始化日志格式 [ywgy-app-service:10.10.6.100:30000] 2025-06-10 08:40:53.444 INFO 1[TID: N/A][uId:][sId:][tId:][po…

Linux下制作Nginx綠色免安裝包

linux下安裝nginx比較繁瑣&#xff0c;遇到內網部署環境更是麻煩。根據經驗將nginx打包一個綠色版進行使用。 大體思路&#xff0c;在一臺正常的機器上面制造好安裝包&#xff0c;然后上傳到內網服務器&#xff0c;解壓使用 安裝包制作 安裝依賴 yum install gcc-c pcre per…

腦機新手指南(七):OpenBCI_GUI:從環境搭建到數據可視化(上)

一、OpenBCI_GUI 項目概述 &#xff08;一&#xff09;項目背景與目標 OpenBCI 是一個開源的腦電信號采集硬件平臺&#xff0c;其配套的 OpenBCI_GUI 則是專為該硬件設計的圖形化界面工具。對于研究人員、開發者和學生而言&#xff0c;首次接觸 OpenBCI 設備時&#xff0c;往…

【Zephyr 系列 18】分布式傳感網絡系統設計:從 BLE Mesh 到邊緣網關的數據閉環

??關鍵詞:Zephyr、BLE Mesh、邊緣網關、分布式網絡、狀態同步、組播、數據聚合、遠程控制 ??適合人群:希望實現 BLE Mesh 與網關聯合控制、多設備組網協作、數據閉環采集的開發者 ??預計字數:5500+ 字 ?? 背景與系統目標 在工業、農業、倉儲等場景中,我們常見以下…

【區塊鏈基礎】區塊鏈的 Fork(分叉)深度解析:原理、類型、歷史案例及共識機制的影響

區塊鏈的 Fork(分叉)全面解析:原理、類型、歷史案例及共識機制的影響 在區塊鏈技術的發展過程中,Fork(分叉)現象是不可避免且極具影響力的一個環節。理解區塊鏈分叉的形成原因、具體表現以及共識機制對分叉的作用,對于深入把握區塊鏈技術架構及其治理機制至關重要。 本…

開源 java android app 開發(十一)調試、發布

文章的目的為了記錄使用java 進行android app 開發學習的經歷。本職為嵌入式軟件開發&#xff0c;公司安排開發app&#xff0c;臨時學習&#xff0c;完成app的開發。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 相關鏈接&#xff1a; 開源 java an…

數據的聚合

聚合可以實現對文檔數據的統計&#xff0c;分析&#xff0c;運算&#xff0c;聚合常見有三類&#xff08;聚合的值一定不能是text類型的&#xff09;&#xff1a; 桶&#xff08;Bucket&#xff09;聚合&#xff1a;用來對文檔做分組。 度量&#xff08;Metric&#xff09;聚合…

C++默認構造函數被隱式刪除

一、 看cppreference時&#xff0c;發現被隱式刪除的構造函數&#xff0c;查詢做如下記錄&#xff1a; struct F {int& ref; // reference memberconst int c; // const member// F::F() is implicitly defined as deleted };// user declared copy constructor (either …

6.ref創建對象類型的響應式數據

其實ref接收的數據可以是&#xff1a;基本類型、對象類型。若ref接收的是對象類型&#xff0c;內部其實也是調用了reactive函數。 <template><div class"person"><h2>汽車信息&#xff1a;一臺{{ car.brand }}汽車&#xff0c;價值{{ car.price }…

如何設計一個用于大規模生產任務的人工智能AI系統

部署一個SOTA模型&#xff0c;讓它服務數百萬用戶&#xff0c;處理TB級別的數據&#xff0c;并且7x24小時可靠運行是件非常有挑戰性的工作。我們將探討構建一個能夠創建LLM、多模態模型以及各種其他AI產品的大規模AI系統所需的每個開發階段。每個開發階段如何相互關聯&#xff…

國債與企業債:穩健與高收益的債券選擇

債券市場是投資者獲取穩定收益的重要渠道&#xff0c;而國債和企業債是最常見的兩種債券類型。它們雖然都屬于固定收益類產品&#xff0c;但在風險、收益和適用人群上有顯著區別。 1. 概念對比&#xff1a;國家信用 vs. 企業信用 &#xff08;1&#xff09;國債&#xff08;政…