freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c設(shè)計(jì)模式基礎(chǔ)教程-文庫吧資料

2025-07-05 06:30本頁面
  

【正文】 coutNorth Banana \nendl。//南方蘋果class SouthApple : public Fruit{public: virtual void sayname() { coutSouth Apple \nendl。//南方香蕉class SouthBanana : public Fruit{public: virtual void sayname() { coutSouth Banana \nendl。 } virtual Fruit* getBanana() { return new Fruit()。 }}。3. 抽象(Product)角色抽象模式所創(chuàng)建的所有對(duì)象的父類,它負(fù)責(zé)描述所有實(shí)例所共有的公共接口。(要么香蕉、要么蘋果)抽象工廠可以一下生產(chǎn)一個(gè)產(chǎn)品族(里面有很多產(chǎn)品組成)1. 抽象工廠(Creator)角色 抽象工廠模式的核心,包含對(duì)多個(gè)產(chǎn)品結(jié)構(gòu)的聲明,任何工廠類都必須實(shí)現(xiàn)這個(gè)接口。===》抽象工廠存在原因解釋:具體工廠在開閉原則下, 能生產(chǎn)香蕉/蘋果/梨子。 備注1:工廠模式:要么生產(chǎn)香蕉、要么生產(chǎn)蘋果、要么生產(chǎn)西紅柿;但是不能同時(shí)生產(chǎn)一個(gè)產(chǎn)品組。} 抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最其一般性的。 couthello....\n。 delete fruit。 fruit = ffgetFruit()。 delete ff。 fruitsayname()。 //1 ff = new BananaFactory()。void main(){ FruitFactory * ff = NULL。//蘋果工廠class AppleFactory : public FruitFactory{public: virtual Fruit* getFruit() { return new Apple。//蘋果class Apple : public Fruit{public: virtual void sayname() { coutApple \nendl。//香蕉工廠class BananaFactory : public FruitFactory{public: virtual Fruit* getFruit() { return new Banana。//香蕉class Banana : public Fruit{public: virtual void sayname() { coutBanana \nendl。class FruitFactory{public: virtual Fruit* getFruit() { return new Fruit()。class Fruit{public: virtual void sayname() { coutfruit\n。 “開放-封閉”通過添加代碼的方式,不是通過修改代碼的方式完成功能的增強(qiáng)。而簡(jiǎn)單工廠模式在添加新產(chǎn)品對(duì)象后不得不修改工廠方法,擴(kuò)展性不好。 工廠方法模式之所以有一個(gè)別名叫多態(tài)性工廠模式是因?yàn)榫唧w工廠類都有共同的接口,或者有共同的抽象父類。具體產(chǎn)品(Concrete Product)角色 工廠方法模式所創(chuàng)建的具體實(shí)例對(duì)象 工廠方法模式與簡(jiǎn)單工廠模式在結(jié)構(gòu)上的不同不是很明顯。具體工廠( Concrete Creator)角色具體工廠類是抽象工廠的一個(gè)實(shí)現(xiàn),負(fù)責(zé)實(shí)例化產(chǎn)品對(duì)象。核心工廠類不再負(fù)責(zé)產(chǎn)品的創(chuàng)建,這樣核心類成為一個(gè)抽象工廠角色,僅負(fù)責(zé)具體工廠子類必須實(shí)現(xiàn)的接口,這樣進(jìn)一步抽象化的好處是使得工廠方法模式可以使系統(tǒng)在不修改具體工廠角色的情況下引進(jìn)新的產(chǎn)品。} 工廠方法模式同樣屬于類的創(chuàng)建型模式又被稱為多態(tài)工廠模式 。 couthello...\n。 op2second = 20。)。 COperation *op2 = CCalculatorFactory::CreateOperation(39。 op1second = 20。)。void main(){ COperation *op1 = CCalculatorFactory::CreateOperation(39。 } return tmp。 break。39。 break。+39。class CCalculatorFactory{public: static COperation*CreateOperation(char cOperator) { COperation * tmp = NULL。class SubOperation : public COperation{public: double GetResult() { return first second。class AddOperation : public COperation{public: double GetResult() { return first + second。 public: virtual double GetResult() = 0。//需求://模擬四則運(yùn)算; //用操作符工廠類生產(chǎn)操作符(加減乘除), 進(jìn)行結(jié)果運(yùn)算//運(yùn)算符抽象類 COperation //加減乘除具體的類 (注意含有2個(gè)操作數(shù))//工廠類CCalculatorFactory //核心思想 用一個(gè)工廠來根據(jù)輸入的條件產(chǎn)生不同的類,然后根據(jù)不同類的virtual函數(shù)得到不同的結(jié)果class COperation{public: int first。核心思想是用一個(gè)工廠來根據(jù)輸入的條件產(chǎn)生不同的類,然后根據(jù)不同類的virtual函數(shù)得到不同的結(jié)果。}主要用于創(chuàng)建對(duì)象。 bananagetFruit()。 } peargetFruit()。void main41(){ Fruit *pear = Factory::Create(pear)。 } return tmp。 } else if (strcmp(name, banana) == 0) { tmp = new Banana()。class Factory {public: static Fruit* Create(char *name) { Fruit *tmp = NULL。class Pear : public Fruit{public: virtual void getFruit() { cout梨子endl。class Banana : public Fruit{public: virtual void getFruit() { cout香蕉endl。//元素分析://抽象產(chǎn)品類:水果類//具體的水果了:香蕉類、蘋果類、梨子//優(yōu)點(diǎn) 適用于不同情況創(chuàng)建不同的類時(shí)//缺點(diǎn) 客戶端必須要知道基類和工廠類,耦合性差 增加一個(gè)產(chǎn)品,需要修改工廠類class Fruit{public: virtual void getFruit() = 0。 include iostreamusing namespace std。不難發(fā)現(xiàn),簡(jiǎn)單工廠模式的缺點(diǎn)也正體現(xiàn)在其工廠類上,由于工廠類集中了所有實(shí)例的創(chuàng)建邏輯,所以“高內(nèi)聚”方面做的并不好。用戶在使用時(shí)可以直接根據(jù)工廠類去創(chuàng)建所需的實(shí)例,而無需了解這些對(duì)象是如何創(chuàng)建以及如何組織的。(Concrete Product)角色簡(jiǎn)單工廠模式所創(chuàng)建的具體實(shí)例對(duì)象//依賴: 一個(gè)類的對(duì)象 當(dāng)另外一個(gè)類的函數(shù)參數(shù) 或者是 返回值3簡(jiǎn)單工廠模式的優(yōu)缺點(diǎn) 在這個(gè)模式中,工廠類是整個(gè)模式的關(guān)鍵所在。工廠類可以被外界直接調(diào)用,創(chuàng)建所需的產(chǎn)品對(duì)象。通過專門定義一個(gè)類來負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類。 C++全局和靜態(tài)變量初始化順序的研究(CSDN)。 DoubleChecked Locking,Threads,Compiler Optimizations,and More(Scott Meyers),解釋了由于編譯器的優(yōu)化,shared_ptr 有類似情況。 MSDN,有關(guān)線程同步interlocked相關(guān)的知識(shí)。如果不考慮多線程,的 確如此,但是一旦要在多線程中運(yùn)用,那么從我們的教程中可以了解到,它涉及到很多編 譯器,多線程,C++語言標(biāo)準(zhǔn)等方面的內(nèi)容。同步問題是多線程編程中最復(fù)雜的問題,后面的linux系統(tǒng)編程中,還會(huì)有更深入的介紹。它可以封鎖線程的執(zhí)行,直到到達(dá)某一具體時(shí)間。從本質(zhì)上講,互斥量是信號(hào)量的一種特殊形式。當(dāng)計(jì)數(shù)器值小于等于0時(shí),相應(yīng)線程必須等待。信號(hào)量可以允許一個(gè)或有限個(gè)線程訪問共享資源?;コ饬康墓ぷ鞣绞椒浅n愃朴谂R界區(qū),只是互斥量不僅保護(hù)一個(gè)進(jìn)程內(nèi)為多個(gè)線程使用的共享資源,而且還可以保護(hù)系統(tǒng)中兩個(gè)或多個(gè)進(jìn)程之間的的共享資源。在另一個(gè)線程可以訪問該資源之前,前一個(gè)線程必須釋放臨界區(qū)對(duì)象,以便新的線程可以索取對(duì)象的訪問權(quán)。臨界區(qū)對(duì)象通過提供一個(gè)進(jìn)程內(nèi)所有線程必須共享的對(duì)象來控制線程。它有兩種類型:自動(dòng)重置(autoreset)事件和手動(dòng)重置(manualreset)事件。事件對(duì)象作為標(biāo)志在線程間傳遞信號(hào)。當(dāng)相關(guān)聯(lián)的同步對(duì)象處于信號(hào)狀態(tài)時(shí),線程可以執(zhí)行(訪問共享資源),反之必須等待。第二個(gè)原因是有時(shí)要求確保線程之間的動(dòng)作以指定的次序發(fā)生,如一個(gè)線程需要等待由另外一個(gè)線程所引起的事件。例如,一個(gè)線程正在更新一個(gè)結(jié)構(gòu),同時(shí)另一個(gè)線程正試圖讀取同一個(gè)結(jié)構(gòu)。使用多進(jìn)程與多線程時(shí),有時(shí)需要協(xié)同兩種或多種動(dòng)作,此過程就稱同步(Synchronization)。}程序的并發(fā)執(zhí)行往往帶來與時(shí)間有關(guān)的錯(cuò)誤,甚至引發(fā)災(zāi)難性的后果。 } //Singelton::releaseSingelton()。 ithreadnum。 } TRACE(等待線程結(jié)束\n)。 ithreadnum。 break。threadfunc, 0 , 0 )。dwThreadId[i] )。 i++) { //hThread[i] = (HANDLE)_beginthreadex( NULL, 0, amp。 for (i=0。 HANDLE hThread[201]。}void CMy01單例優(yōu)化Dlg::OnBnClickedButton2(){ int i = 0。 Singleton::Instantialize()printV()。 // TODO: 在此添加控件通知處理程序代碼}void threadfunc(void *myIpAdd){ int id = GetCurrentThreadId()。 ()。Singleton* Singleton::pInstance = 0。 } static Singleton *pInstance。 } ()。 static Singleton *Instantialize() { if(pInstance == NULL) //double check { ()。保證了單例;//5)同樣道理,若第2個(gè)線程,()后,第3個(gè)線程會(huì)競(jìng)爭(zhēng)執(zhí)行臨界區(qū)代碼;此時(shí)第3個(gè)線程需要再次判斷 if(pInstance == NULL)。//1)第1個(gè)、2個(gè)、3個(gè)線程執(zhí)行第一個(gè)檢查,都有可能進(jìn)入黃色區(qū)域(臨界區(qū))//2)若第1個(gè)線程進(jìn)入到臨界區(qū),第2個(gè)、第3個(gè)線程需要等待//3)第1個(gè)線程執(zhí)行完畢,()后,第2個(gè)、第3個(gè)線程要競(jìng)爭(zhēng)執(zhí)行臨界區(qū)代碼。public: static void printV() { TRACE(printV..\n)。 operator = (const Singleton amp。)。 TRACE(Singleton end\n)。//man pthread_create() class Singleton{private: Singleton() { TRACE(Singleton begin\n)。方便使用臨界區(qū)類對(duì)象,同步線程// MFC Diagram 應(yīng)用程序include include include include include iostreamusing namespace std。 return 0。 cout hello....endl。 i++) { //CloseHandle( hThread[i] )。 for (i=0。 i++) { WaitForSingleObject( hThread[i], INFINITE )。 } } //等待所有的子線程都運(yùn)行完畢后,才執(zhí)行 這個(gè)代碼 f
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1