C 設計模式 反射模式

2021-08-28 14:26:44 字數 1644 閱讀 5949

#ifndef __reflect_h__

#define __reflect_h__

#include #include //反射:就是程式在執行的過程中,可以通過類名稱建立物件,並獲取類中申明的成員變數和方法。

//反射雖然不屬於二十三種設計模式,卻是很重要的一種機制,c++語言並不支援反射,所以只能通過一些手段模擬實現。

//建立具體類的函式指標

typedef void* (*createclasscallback)(void);

class reflectfactory

;private:

std::mapm_classmap;

static reflectfactory* m_instance;

};//通過建立全域性物件會呼叫建構函式完成註冊

class registeraction

;//定義註冊巨集來定義建立類例項的函式,並自動生成乙個全域性物件

#define register_class(classname) \

classname * create##classname() \

\registeraction g_register##classname(#classname, (createclasscallback)create##classname)

//基類

class ibase

virtual ~ibase(){}

public:

virtual void print() = 0;

};//具體類

class classa : public ibase

;class classb : public ibase

;void testreflect();

#endif

#include "reflect.h"

reflectfactory * reflectfactory::m_instance = null;

register_class(classa);

register_class(classb);

reflectfactory * reflectfactory::getinstance()

return m_instance;

}bool reflectfactory::registerclass(std::string classname, createclasscallback method)

return false;

}void * reflectfactory::getclassbyname(std::string classname)

} return null;

}registeraction::registeraction(std::string classname, createclasscallback method)

classa::classa()

classa::~classa()

void classa::print()

classb::classb()

classb::~classb()

void classb::print()

void testreflect()

C 設計模式之 抽象工廠模式與反射

定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類 在access中給user表增加一條記錄 在access中根據id得到user表一條記錄 提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類 class department public string id inte ce id...

反射技術與設計模式

反射 reflection 是 net 中的重要機制,通過放射,可以在執行時獲得.net中每乙個型別 包括類 結構 委託 介面和列舉等 的成員,包括方法 屬性 事件,以及建構函式等。還可以獲得每個成員的名稱 限定符和引數等。有了反射,即可對每乙個型別瞭如指掌。如果獲得了建構函式的資訊,即可直接建立物...

反射與工廠設計模式

工廠設計模式的一般格式 介面 實現對應介面的子類 工廠類通過反射技術改進的工廠,不再使用new關鍵字來例項化物件了 package com.reflect.factory.model inte ce ifruit ifruit class factory public static ifruit g...