מה לא singleton בזה?

ASP zone

New member
מה לא singleton בזה?

#ifndef _Factory #define _Factory class Factory; // Forward decleration #include "D20Character.hpp" #include <map> #include <iostream> using namespace std; using D20Rules::D20Character; class Factory { static map<int, D20Character *> mapFactoryList; int iIndex; public: inline Factory(int iRequestedIndex) { iIndex = iRequestedIndex; } ~Factory() { /*for ( int i = 0; i < mapFactoryList.size(); i++ ) delete mapFactoryList;*/ } static int addItem(D20Character *cCharacter) { for ( int i = 0; i < mapFactoryList.size(); i++ ) if ( mapFactoryList == cCharacter ) return -1; int iThisIndex = mapFactoryList.size(); mapFactoryList.insert(make_pair(iThisIndex, cCharacter)); return iThisIndex; } inline D20Character *getInstance() { return mapFactoryList[iIndex]; } }; #endif
 

galh

New member
נורא פשוט.

ה- constructor הוא public, כלומר אני יכול ליצור יותר מאובייקט אחד של המחלקה Factory.
 

galh

New member
נכון, אבל זו לא הצורה "הקלאסית".

אם תסתכל בספר Design Patterns תראה שהשימוש ב- singlton מתאר צורת עבודה כזו שאתה מקבל מצביע לאובייקט שמובטח לך שהוא יחיד. אצלך, לעומת זאת, זה קצת מבולגן, אתה יוצר Factory (קצת מיותר כי אתה תמיד יוצר את אותו אובייקט D20Char) אבל מקבל מצביע ל- D20Char. אז מי הוא ה- singlton פה? בנוסף, singlton הוא אובייקט שאתה לא יוצר אותו ישירות, הוא נוצר "לבד" שפונים אליו. אגב, מי אמר לך שזה לא singlton ולמה אכפת לך?
 

ASP zone

New member
גילעד נוביק

המנהל של פורום שפות תכנות. האם זה צריך להיות singleton לפי דעתכם?
 

galh

New member
אם הוא אמר אז הוא צודק ../images/Emo88.gif

מה צריך להיות singlton? ה- factory? לדעתי לא. אבל אני לא מכיר את התכנון של המערכת שלך. האם כל רכיב צריך להיות מסוגל ליצור D20Char?
 

galh

New member
זו לא השאלה.

קח לדוגמא: מנהל קול, מנהל התצוגה או מנוע המשחק, אלו בדרך כלל דוגמאות לשימוש ב- singlton. הרבה רכיבים צריכים גישה אליהם והם יחודיים במערכת.
 
למעלה