(一)創建型設計模式:4、原型模式(Prototype Pattern)

目錄

1、原型模式的含義

2、C++實現原型模式的簡單實例


1、原型模式的含義

通過復制現有對象來創建新對象,而無需依賴于顯式的構造函數或工廠方法,同時又能保證性能。

The prototype pattern is a creational design pattern in software development. It is used when the type of objects to create is determined by a prototypical instance, which is cloned to produce new objects. This pattern is used to: avoid subclasses of an object creator in the client application, like the factory method pattern does.

Specify the kind of objects to create using a prototypical instance, and create new objects by copying this prototype.
(使用原型實例指定將要創建的對象類型,通過復制這個實例創建新的對象。)

2、C++實現原型模式的簡單實例


#include <iostream>
#include <string>// 抽象原型類
class Prototype {
public:virtual Prototype* clone() const = 0;virtual void show() const = 0;
};// 具體原型類
class ConcretePrototype : public Prototype {
public:ConcretePrototype(const std::string& name) : m_name(name) {}Prototype* clone() const override {return new ConcretePrototype(*this);}void show() const override {std::cout << "ConcretePrototype: " << m_name << std::endl;}private:std::string m_name;
};int main() {// 創建原型對象Prototype* prototype = new ConcretePrototype("Prototype");// 克隆原型對象Prototype* clone = prototype->clone();// 展示原型和克隆對象prototype->show();clone->show();delete prototype;delete clone;return 0;
}

在上述示例中,我們定義了一個抽象原型類(Prototype),其中包含了兩個純虛函數:clone()用于克隆對象,show()用于展示對象。然后,我們實現了具體的原型類(ConcretePrototype),它繼承自抽象原型類,并實現了抽象原型類中的純虛函數。

在主函數中,我們首先創建一個原型對象(ConcretePrototype),然后通過調用clone()方法來克隆原型對象,得到一個新的對象。最后,我們分別展示原型對象和克隆對象的信息。

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

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

相關文章

【校招VIP】java語言考點之Map1.7和1.8

考點介紹&#xff1a; HashMap是大中小廠面試的高頻考點&#xff0c;主要從底層結構&#xff0c;和線程安全等角度來進行考察&#xff0c;考察點比較集中&#xff0c;但是有一定難度。 分為初級和高級兩種&#xff1a;初級一般集中在中小公司的map的key-value的可重復和可空問題…

Server - WandB 統計運行 Epoch 以及 手動上傳日志

歡迎關注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132227253 WandB (Weights & Biases) 是在線的模型訓練可視化工具&#xff0c;可以幫助跟蹤機器學習項目&#xff0c;記錄運行中的超參數和輸…

linux shell快速入門

linux shell快速入門 0 、前置1、簡單使用 0 、前置 一安裝linux的虛擬環境 1、簡單使用 1、新建/usr/shell目錄 2、新建hello.sh 文件 3、編寫腳本文件# !/bin/bashecho "hello world"查看是否具備執行權限 新增執行權限 chomd x hello.sh執行hello.sh文件 /b…

限制編輯下的PDF可以轉換其他格式嗎?這2個方法可行

我們知道&#xff0c;PDF可以通過設置“限制編輯”來保護文件不被隨意更改&#xff0c;那PDF設置了“限制編輯”還可以轉換其他格式嗎&#xff1f; 如果PDF設置的是禁止任何更改的“限制編輯”&#xff0c;那PDF菜單【轉換】界面下的格式選項就會呈現灰色狀態&#xff0c;無法…

vscode的配置和使用

1.側邊欄調整大小 放大&#xff1a;View -> Appearance -> Zoom in&#xff08;快捷鍵Ctrl &#xff09; 縮小&#xff1a;View -> Appearance -> Zoom out&#xff08;快捷鍵Ctrl -&#xff09; 側邊欄字體調整到合適大小后&#xff0c;可以按下一步調整代碼區…

【java】Java與SQLite3數據庫類型之間對應關系

引 在開發應用程序時&#xff0c;經常需要將數據存儲到數據庫中。SQLite3 是一種輕量級的嵌入式數據庫&#xff0c;廣泛應用于移動設備和嵌入式系統。在使用 SQLite3 數據庫時&#xff0c;了解 Java 數據類型與 SQLite3 數據庫類型之間的對應關系非常重要&#xff0c;以便正確…

一盞茶的時間,帶你輕松上手Pinia

&#x1f3ac; 岸邊的風&#xff1a;個人主頁 &#x1f525; 個人專欄 :《 VUE 》 《 javaScript 》 ?? 生活的理想&#xff0c;就是為了理想的生活 ! 目錄 &#x1f4da; 前言 &#x1f4d8; 創建 Pinia &#x1f4d8; Option Store &#x1f4d8; Pinia 提供多種選項配…

k8s pod啟動報錯: no route to host

k8s pod kuboard啟動報錯 查看pod命令 kubectl get pods -A kubectl get pods --all-namespaces查看報錯pod日志 命令&#xff1a; kubectl logs -f -n namespace nametime"2023-08-09T13:40:3608:00" levelerror msg"不能獲取 AgentEndpointsGet \"http:/…

在 Linux 中使用 systemd 注冊服務

Systemd 是一種現代的 Linux 系統初始化系統和服務管理器。它旨在管理系統服務的初始化、配置和控制。Systemd 的一個關鍵特性是它可以管理服務&#xff0c;這些服務是為系統提供特定功能的后臺進程。在本指南中&#xff0c;我們將探討如何使用 systemd 在 Linux 中注冊服務。 …

【算法基礎20-單調棧】

算法原理: 用單調遞增棧&#xff0c;當該元素可以入棧的時候&#xff0c;棧頂元素就是它左側第一個比它小的元素。 以&#xff1a;3 4 2 7 5 為例&#xff0c;過程如下&#xff1a; 動態模擬過程 題目&#xff1a; 給定一個長度為 N 的整數數列&#xff0c;輸出每個數左邊第一…

Linux 基礎(九)軟件包管理

軟件包管理 概念軟件包管理工具Red Hat 系RPMrpm安裝rpm卸載 YUM&#xff08;推薦&#xff09;源倉庫管理常見國內 yum 源更換源&#xff08;非必須&#xff0c;除非下載速度確實過慢&#xff09; YUM管理軟件 Debian 系源倉庫管理常見國內 apt 源更換源&#xff08;非必須&…

postman入門基礎 —— 接口測試流程

一、編寫接口測試計劃 接口測試計劃和功能測試計劃目標一致&#xff0c;都是為了確認需求、確定測試環境、確定測試方法&#xff0c;為設計測試用例做準備&#xff0c;初步制定接口測試進度方案。一般來說&#xff0c;接口測試計劃包括概述、測試資源、測試功能、測試重點、測試…

Flutter 報錯 Could not create task ‘xxx‘.this and base files have different roots

遇到此問題也是先去百度了&#xff0c;有的說改了Gradle版本、gradle-wrapper.properties版本和ext.kotlin_version版本之后解決的&#xff0c;我沒嘗試&#xff0c;我用蹩腳的英語大致讀了一下就不是這樣說的&#xff0c;況且我用有道翻譯了也不是這個意思啊&#xff0c;我不知…

抖音小程序實現less語言編譯樣式

1.在抖音開發工具中搜索擴展less 2. 然后點擊小齒輪選擇擴展設置 3. 然后在擴展設置中選擇在settings.json中編輯# 4. 在settings.json中加入以下這段代碼即可 // Easy LESS配置"less.compile": {"compress": false,//是否壓縮"sourceMap": fal…

前端性能優化:緩存

在快節奏的互聯網時代&#xff0c;網站的加載速度直接影響用戶體驗和業務成功。而緩存作為性能優化的重要手段&#xff0c;可以大幅提升網頁加載速度&#xff0c;減少服務器負擔。本文將為你詳解緩存的使用&#xff0c;幫助你優化前端性能&#xff0c;為用戶呈現更快速、流暢的…

EndNote 21 for Mac(文獻管理軟件) v21.0.1中文版

EndNoter mac是一款參考文獻管理軟件&#xff0c;旨在幫助學術研究者、學生和專業人士有效地管理和引用參考文獻。該軟件提供了許多功能&#xff0c;使用戶可以輕松地組織、搜索和引用各種類型的文獻。 EndNoter mac軟件特點和功能 1. 參考文獻管理&#xff1a;EndNoter允許用…

提高 After Effects 效率的 40 個最佳快捷鍵

After Effects 是運動圖形和視覺效果的強大工具&#xff0c;但它也可能讓人不知所措。擁有如此多的特性和功能&#xff0c;很容易讓人迷失在軟件中。但是&#xff0c;有一種方法可以簡化您的工作流程并提高工作效率 - 使用鍵盤快捷鍵。 After Effects素材文件巨大、占用電腦內…

探索自動化網頁交互的魔力:學習 Selenium 之旅【超詳細】

"在當今數字化的世界中&#xff0c;網頁自動化已經成為了不可或缺的技能。想象一下&#xff0c;您可以通過編寫代碼&#xff0c;讓瀏覽器自動執行各種操作&#xff0c;從點擊按鈕到填寫表單&#xff0c;從網頁抓取數據到進行自動化測試。學習 Selenium&#xff0c;這一功能…

Claude 2、ChatGPT、Google Bard優劣勢比較

?Claude 2&#xff1a; 優勢&#xff1a;Claude 2能夠一次性處理多達10萬個tokens&#xff08;約7.5萬個單詞&#xff09;。 tokens數量反映了模型可以處理的文本長度和上下文數量。tokens越多&#xff0c;模型理解語義的能力就越強&#xff09;。它在法律、數學和編碼等多個…

一百五十二、Kettle——Kettle9.3.0本地連接Hive3.1.2(踩坑,親測有效)

一、目的 由于先前使用的kettle8.2版本在Linux上安裝后&#xff0c;創建共享資源庫點擊connect時頁面為空&#xff0c;后來采用如下方法&#xff0c;在/opt/install/data-integration/ui/menubar.xul文件里添加如下代碼 <menuitem id"file-openZiyuanku" label&…