設計模式的C++實現之裝飾者模式

解決的問題:我們在裝飾新家的時候買了幾幅抽象畫,買回來之後發現有些加上色彩豔麗的邊框更適合我們,而 有的加上玻璃罩之後更能符合我們的使用。那我們來怎麼解決這個問題呢?他需要動態給別的對象增加額外的職責,這就 是裝飾者模式的目的。我們可以通過繼承的方式來給原對象增加新功能,但是裝飾者模式採用組合的方式比產生子 類更加靈活。類圖及範例實現:在裝飾模式中的各個角色有:抽象構 件(Component)角色:給出一個抽象介面,以規範準備接收附加責任的對象。具體構件(Concrete

設計模式的C++實現之原型模式

解決的問題:用原型執行個體指定建立對象的種類,並且通過拷貝這些原型建立新的對象。這個其實和C++的拷貝構 造函數的作用是一致的,實際上就是動態抽取當前對象運行時的狀態。類圖結構:客戶(Client)角色:客戶類 提出建立對象的請求。抽象原型(Prototype)角色:這是一個抽象角色,通常由一個C#介面或抽象類別實現。此角色給出 所有的具體原型類所需的介面。在C#中,抽象原型角色通常實現了ICloneable介面。具體原型(Concrete Prototype)

設計模式的C++實現之面板模式

概述想想我們小時候玩的四驅車,裡面的構造很複雜,馬達,舵機,電池組等等,而我們控制它卻非常簡單,只 要開啟電池開關,他就可以跑。我們其實不用知道它裡面是如何工作,只要知道撥動開關它就可以工作就行了,這個開關其 實就四驅車給我們的一個友好的組件,使得我們可以很方便的控制它。面板模式其實定義了一個高層介面,該介面 為子系統中的一組介面提供一個一致的介面,使得這一子系統更加容易使用。類圖和範例在這個對象圖中,出現了兩個

設計模式的C++實現之適配器模式

解決的問題:適配器模式把一個類的介面變換成用戶端所期待的另一種介面,從而使原本介面不匹配而無法在一 起工作的兩個類能夠在一起工作。比如說我的hp筆記本,美國產品,人家美國的電壓是110V的,而我們中國的電壓是220V, 要在中國能使用,必須找個變壓器轉一下電壓才可以。這個變壓器就是個適配器。適配器模式有類適配器和對象適 配器兩種模式,我們將分別討論。類適配器:由圖中可以看出,Adaptee類沒有Request方法,而客戶期待這

設計模式的C++實現之橋模式

橋模式,其作用就是讓抽象與實現相分離,讓兩者都能夠各自變化。舉例來說吧,畫圖,我可以畫矩形,圓,三 角形等等,在哪裡畫呢?我可以在pdf上畫,也可以在doc上面畫。畫什麼圖和在哪裡畫都是可以獨立變化的,此種情況就比 較適合用橋模式。就是說設計中有超過一維的變化我們就可以用橋模式。如果只有一維在變化,那麼我們用繼承就可以圓滿 的解決問題。我的圖形定義:#pragma once #include<vector> #include"ImpShape.h"

設計模式的C++實現之建造者模式

解決的問題:我建立的這個對象比較複雜,且該對象裡面的成員函數用不同的實現來表示不同的執行個體,換句話說 就是同樣的對象構建過程可以有不同的表示。比如我那天去吃過橋米線,他們有不同的套餐,套餐裡包含的種類是一樣的, 都有一碗米線,一份涼菜,一杯飲料。但是不同的套餐裡這3樣又都不是全部一樣的。此時我們就可以用建造者模式。類圖結構:1.建造者(Builder)角色:給出一個抽象介面,以規範產品對象的各個組成成分的建造。一般而言,此介面獨立於應

設計模式的C++實現之簡單原廠模式

簡單原廠模式按照設計模式類型分的話是屬於建立型模式,他是原廠模式中最簡單的一種,他不屬於GoF 23中設計模式之一,但是是簡單實用的。他是有一個工廠對象來決定建立哪一種對象的執行個體。實現比較簡單,這裡我只貼出類圖和調用方法:調用方法:IProduct * simpleFactory::Create(std::string className) { if( className == "Ipad") return new Ipad();

設計模式的C++實現之Factory 方法模式

Factory 方法模式不同於簡單原廠模式的地方在於Factory 方法模式把對象的建立過程放到裡子類裡。這樣工廠父物件和產品父 對象一樣,可以是抽象類別或者介面,只定義相應的規範或操作,不涉及具體的建立或實現細節。其類圖如下:執行個體代碼為:#pragma once class IProduct { public: IProduct(void); virtual ~IProduct(void); }; #pragma once #include &

C++ Builder操縱多媒體資料庫

隨著電腦軟、硬體技術的日益發展,對多媒體資訊的處理能力不斷增強,利 用快速開發工具C++ Builder所具有的強大資料庫開發功能,使得對多媒體資料 (庫)的建立、存、取、顯示、播放等控制都非常容易實現。本文將以構建具有5 個欄位“編號、姓名、像片、聲音、活動影像”的資料庫為例,根據 多媒體資料與資料庫本身是否共同儲存,介紹兩種多媒體資料庫處理方法,在這 裡稱為整合法和分離法。整合法此方法是將多媒體資料直接存入

用C++ Builder設定程式使用時間

目前,許多應用程式都有在一定限制條件內免費使用的功能,利用該功能可以 有效限制非法使用者的使用,同時,還可以使合法使用者在充分瞭解軟體優缺點的基 礎上,再決定是否購買。本文稱實現這種功能的方法為保護方法。保護方法的利 用在保護正版軟體的基礎上,既有效地擴大了軟體的使用範圍,又給使用者提供了 進行充分選擇的機會。保護方法本文介紹4種利用C++ Builder 實現的保護方法:利用註冊表限制程式使用的天數,比如限制使用30天;利用註冊表限制程式使用的次數,比如限制使用45次;設定程式 使用的到期日,

C++編程雜談之四:漫談UML

UML對很多人來說應該不是一個陌生的概念,這一兩年來,UML被大家越來越多的討論著。本來UML跟我這個主題似乎並不能扯上多大的關係(它是語言無關的,甚至可以說其本身就是一種語言——用於交流的)。我在此談到它有兩個目的:1.UML是針對物件導向軟體開發的,而C++正是這樣的一種語言2.UML在設計中被越來越多的使用著,而下一篇雜談準備討論設計模式,如果不瞭解UML,那麼無法進行下去UML,全稱:Unified Modeling

C++編程雜談之三:物件導向(續)

上一篇我們涉及了物件導向的一個基本概念--封裝,封裝是一個相對比較簡單的概念,也很容易接受,但是很多的場合下面,僅僅是封裝並不能很好的解決很多問題,考慮下面的例子:假設我們需要設計一個對戰遊戲的戰鬥細節,在最初的版本中我們將支援一種動作--fight。假設我們有三種角色:fighter、knight和warrior,每種角色的health、hit point不同,基於封裝的基本想法,我們很自然的想到對每個對象使用類的封裝,首先明顯的元素有2個:health、hit point,另外還有name(

C++編程雜談之二:物件導向

軟體開發是一個極其複雜的過程,一段小的代碼我們可以快速、準確的完成,但是當你面對的是一個龐大的軟體系統的時候,你是否有不知所措的感覺呢?在我們使用C的年代裡面,編程思想是結構化的,你的C語言老師可能會不斷的教導你怎樣使用結構化的方法來完成一段程式,同時,你可能也知道在軟體開發中的一個重要定律(Wirth定律):程式 = 演算法 + 資料結構在結構化設計中人們通常是這樣來看待這個定律的:程式 =(演算法) +

C++編程雜談之一:編譯器

網上有很多各種編譯器的優劣比較的東西,我寫這些東西並不是想支援或否定某些東西,因為我始終認為在編程的領域中,我只是一個初學者,並沒有資格來評判什麼(況且我也不想去評判),我只是想講述一下個人學習道路上的感受。學編程的一個必備的條件是你要有一個實踐的平台--一個相應的編譯器,沒有這個條件,一切都是空談。選擇編譯器之前,首先選擇的是語言(這個我想不必更多的解釋了),這裡我假設你選擇了C或C++。現在最流行的編譯器恐怕應該是微軟的VC了,在繼續之前,我想再提一下一個重點:VC是一個編譯器,只是一個用來

C++0x概覽:多線程(3)

在初始化時保護資料如果你的資料需要在初始化時被保護,就不能再使用mutex了。因為在初始化結束後,這會引起不必要的同步。C++0x提供了很多方法來在初始化時保護資料。1)假定你的建構函式是用constexpr關鍵字聲明並且滿足常量初始化的條件。在這種情況下,一個靜態儲存區的對象在靜態初始階段會確保在其他代碼運行之前被初始化。對於std::mutex來說,這是最佳選擇,因為它消除了全域mutex初始化時產生紊亂的可能性。class my_class{ int

C++0x概覽:多線程(2)

資料保護同許多線程API一樣,C++0x用互斥來保護共用資料。有四種互斥類型:Non-recursive (std::mutex)Recursive (std::recursive_mutex)允許鎖逾時的non-recursive (std::timed_mutex)允許鎖逾時的recursive (std::recursive_timed_mutex)如果你試圖在一個線程上鎖(lock)一個non-recursive

C++0x概覽:多線程(1)

++ 0x 標準將增加對多線程的支援。以後所有的編譯器都必須遵循新標準中對多線程的規定,這將會給不同平台上程式的移植帶來很大的方便。讓我們先來看看std::thread類,它負責管理線程的執行過程。啟動線程我們建立一個std::thread類的執行個體來啟動一個新線程,用一個線程函數作為建構函式的參數。如void do_work();std::thread t(do_work);std::thread類也接受一個函數對象作為參數。class do_work{public:void

C++ Builder多線程編程中一些體會

最近在寫一個程式用到了多線程,所以對CB下的多線程有一定的學習。現在把自己的一些心得講一下。水平有限,寫的很粗略,請大家見諒。CB相對於VC來說,在CB下寫多線程程式是很簡單的。不僅是VCL中有TThread這個類。封裝了那些關於多線程的WINDOW

使用IDispatch::Invoke函數在C++中調用C#實現的託管類庫方法

CLR Interop簡而言之是讓Unmanaged 程式碼與Managed 程式碼之間可以相互調用的技術。這項技術可以使開發人員重用已有的託管或非託管組建,並根據自己的需要,權衡Managed 程式碼的簡易性與Unmanaged 程式碼的靈活性,選擇適合自己實際情況的程式設計語言,而不用過多考慮重用的組件是用哪種語言開發的。Interop中文的意思是互連性,既然是互連,代碼的調用就有兩種不同的方向。本文所要講述的是使用COM Interop技術在Unmanaged

一個C++日期類(第二部分)

本文適合初級讀者Chuck Allison 是鹽湖城聖 Latter Day 教堂總部下耶穌教堂家族曆史研究處的軟體體系設計師。他擁有數學學士和數學碩士學位。他從1975年起開始編程,從1984年起他開始從事c語言的教學和開發。他目前的興趣是物件導向的技術及其教育。他是X3J16,ANSI C ++標準化委員會的一員。發送e-mail 到 allison@decus.org,或者撥打到電話到 (801)240-4510

總頁數: 4314 1 .... 2826 2827 2828 2829 2830 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.