1. Welcome Guest! In order to create a new topic or reply to an existing one, you must register first. It is easy and free. Click here to sign up now!.
    Dismiss Notice

Good factory implementation ? (C++)

Discussion in 'Microsoft News' started by NewsBot, Mar 17, 2008.

  1. NewsBot

    NewsBot I Got News

    Joined:
    Feb 8, 2006
    Messages:
    1,813
    Operating System:
    Windows Vista Home Premium
    I'm trying to implement a factory method in our application. Do you thing that this kind of implementation is a good one ?

    <!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro--> class<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> Person
    {
    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->public<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo-->:
    ***Person(PersonData personData);
    ***...

    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->private<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo-->:
    ***<!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->int<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> m_identifier;
    ***std::string m_name;
    };
    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro--> class<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> Employee : <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->public<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> Person
    {
    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->public<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo-->:
    ***Employee(PersonData personData);
    ***...

    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->private<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo-->:
    ***<!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->float<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> m_hourlyWage;
    };
    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro--> class<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> Boss : <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->public<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> Person
    {
    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->public<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo-->:
    ***Boss(PersonData personData);
    ***...

    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->private<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo-->:
    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->***float<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> m_annualSalary;
    ***<!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->float<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> m_bonus;
    };
    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro--> struct<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> PersonData
    {
    ***<!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->int<!--colorc--><!--/colorc--> type;
    ***<!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->int<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> identifier;
    ***std::string name;
    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->***float<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> hourlyWage;
    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->***float<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> annualSalary;
    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->***float<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> bonus;
    };
    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro--> class<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> Factory
    {
    <!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->public<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo-->:
    ***<!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->static<!--colorc--><!--/colorc--><!--sizec--><!--/sizec--><!--sizeo:2--><span style="font-size:10pt;line-height:100% <!--/sizeo--> Person* CreatePerson(PersonData personData);
    };

    Person* Factory::CreatePerson(PersonData personData)
    {
    ***<!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->switch<!--colorc--><!--/colorc--> (personData.type)
    ***{
    ******<!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->case<!--colorc--><!--/colorc--> PersonType_Employee:*
    *********return new Employee(personData);
    *********<!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->break<!--colorc--><!--/colorc-->;

    ******<!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->case<!--colorc--><!--/colorc--> PersonType_Boss:*
    *********return new Boss(personData);
    *********<!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->break<!--colorc--><!--/colorc-->;
    ***
    ******<!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->default<!--colorc--><!--/colorc-->:
    *********<!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->throw<!--colorc--><!--/colorc--> std::invalid_argument("...");
    *********<!--coloro:#0000ff--><span style="color:#0000ff <!--/coloro-->break<!--colorc--><!--/colorc-->;
    ***}
    }
    <!--sizec--><!--/sizec-->



     

Share This Page