日記 抽象工廠

2021-05-27 12:48:57 字數 2324 閱讀 2304

有錯誤之處,還請提出

**

#pragma once

#include "string"

#include "memory"

#include "map"

templateclass genericfactory

genericfactory(const genericfactory&);

genericfactory& operator=(const genericfactory&);

public:

static genericfactory & instance()

bool regcreatefn( const classidkey & classname, basecreatefn fn )

std::tr1::shared_ptrcreate(const classidkey & classname )const

return theobject; }

};templateclass registerinfactory

static std::tr1::shared_ptrcreateinstance()

else if (theobj.get() != null && m_bissig == true )

return theobj;

} void register( const classidkey& id )

registerinfactory(const classidkey& id, bool m_bsig = false)

static std::tr1::shared_ptrgetinstance( const classidkey& id ) };

//註冊

#define factory_registry( classtype ) \

template< >bool registerinfactory::m_bissig = false; \

template< >std::tr1::shared_ptrregisterinfactory::theobj ; \

registerinfactoryclasstype##123(std::string(#classtype)) ;

//註冊單列,感覺多餘了

#define factory_registry_singleton( classtype ) \

template< >bool registerinfactory::m_bissig = true; \

template< >std::tr1::shared_ptrregisterinfactory::theobj; \

registerinfactoryclasstype##123(std::string(#classtype),true) ;

//轉成單列的

#define factory_context_to_singleton( classtype ) \

classtype##123.getissig() = true;

//同上,反向

#define factory_context_to_normal( classtype ) \

classtype##123.getissig() = false;

//得到物件的指標

#define factory_get(classtype) \

registerinfactory::getinstance(std::string(#classtype)).get()

//專程對應的指標型別

#define factory_get_dynamic(classtype,classtotype) \

(std::tr1::dynamic_pointer_cast(registerinfactory::getinstance(std::string(#classtype)))).get()

使用:

#include "stdafx.h"

#include "iostream"

#include "conio.h"

#include "genericfactory.hpp"

class animal

輸出:same point

animal

animal

bird

剛開始接觸設計模式,有錯誤,請提出下,多謝。

注:參考 <

2016 12 28 學習日記 抽象工廠模式

今天設計模式結課了,自己才學習了一半,得加油了,近期幾門考試都是弱項,加油複習!今天學習的是虛擬工廠模式 虛擬工廠模式 抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供乙個介面,使客戶端在不必指定產...

抽象工廠模式 抽象工廠模式

抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...

工廠模式 抽象工廠

在看抽象工廠前,我們需要引入兩個概念 1 產品等級結構 2 產品族 我們現在有這樣兩個產品型別 汽車 car 自行車 bike 有兩家公司 寶馬 bmw 奧迪 audi 每乙個廠家都能夠生產這兩種型別的產品 bmw介面 bmwcar,bmwbike audi介面 audicar,audibike 在...