Generic Abstract Factory

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Sebastian Faust

    Generic Abstract Factory

    Hi,

    I am currently reading the chapter about abstract factorys from "Modern C++
    Design" and wondering how it would be possible to create an object which has
    a constructor with parameters. At the moment I can't see any way how to
    solve this problem? Is there any way how to implement such?
    Furthermore I read in the GoF book that usually Abstract Factorys are
    implemented using Factory Methods. At the moment I can't see where in the
    generic case of Abstract Factory, Factory Methods are used.

    Thanks in advance
    Sebastian


  • Thomas Matthews

    #2
    Re: Generic Abstract Factory

    Sebastian Faust wrote:[color=blue]
    > Hi,
    >
    > I am currently reading the chapter about abstract factorys from "Modern C++
    > Design" and wondering how it would be possible to create an object which has
    > a constructor with parameters. At the moment I can't see any way how to
    > solve this problem? Is there any way how to implement such?
    > Furthermore I read in the GoF book that usually Abstract Factorys are
    > implemented using Factory Methods. At the moment I can't see where in the
    > generic case of Abstract Factory, Factory Methods are used.
    >
    > Thanks in advance
    > Sebastian
    >
    >[/color]

    Here is what I use:
    class Any_Class
    : public Some_Base_Class
    {
    public:
    Any_Class(/* deault parameters */);
    Any_Class(const Any_Class& ac); // copy constructor
    Any_Class(istre am& inp); // construct from text stream
    virtual ~Any_Class();

    static Some_Base_Class * create(istream& inp,
    unsigned int id);
    };

    Some_Base_Class *
    Any_Class ::
    create(istream& inp, unsigned int id)
    {
    Some_Base_Class * p_base(NULL);
    if (id = ID_ANY_CLASS)
    {
    p_base = new Any_Class(inp);
    }
    return p_base;
    }


    In the factory:
    typedef Some_Base_Class * (*P_CREATE_FUNC )(istream& inp, id);

    const P_CREATE_FUNC creation_table[] =
    {
    Any_Class::crea te()
    };
    const unsigned int NUM_CREATION_FU NCS = sizeof(creation _table)
    / sizeof(creation _table[0]);

    Some_Base_Class *
    Factory ::
    create(istream& inp)
    {
    unsigned int id;
    Some_Base_Class * p_base(NULL);

    inp >> id;
    for (unsigned int i = 0;
    (p_base == NULL) && (i < NUM_CREATION_FU NCS); ++i)
    {
    p_base = (creation_table[i])(inp, id);
    }
    return p_base;
    }

    --
    Thomas Matthews

    C++ newsgroup welcome message:

    C++ Faq: http://www.parashift.com/c++-faq-lite
    C Faq: http://www.eskimo.com/~scs/c-faq/top.html
    alt.comp.lang.l earn.c-c++ faq:

    Other sites:
    http://www.josuttis.com -- C++ STL Library book
    http://www.sgi.com/tech/stl -- Standard Template Library

    Comment

    • Noah Roberts

      #3
      Re: Generic Abstract Factory

      Sebastian Faust wrote:[color=blue]
      > Hi,
      >
      > I am currently reading the chapter about abstract factorys from "Modern C++
      > Design" and wondering how it would be possible to create an object which has
      > a constructor with parameters.[/color]

      No. But you can use the prototype pattern as Sebastian recommends.

      --
      Noah Roberts
      - "If you are not outraged, you are not paying attention."

      Comment

      • Gianni Mariani

        #4
        Re: Generic Abstract Factory

        Sebastian Faust wrote:[color=blue]
        > Hi,
        >
        > I am currently reading the chapter about abstract factorys from "Modern C++
        > Design" and wondering how it would be possible to create an object which has
        > a constructor with parameters. At the moment I can't see any way how to
        > solve this problem? Is there any way how to implement such?
        > Furthermore I read in the GoF book that usually Abstract Factorys are
        > implemented using Factory Methods. At the moment I can't see where in the
        > generic case of Abstract Factory, Factory Methods are used.
        >[/color]

        Here is a complete generic factory template library that allows you to
        create objects with various parameters (0 ... 3 args - but easily extended).

        It's a tad long so I placed it on my web server.



        This is going to be part of the "Austria C++" library I'm toying with.

        I'll be doing V 0.1 soon so critique (preferably friendly but I'll
        accept anything) is welcome.

        Copyright is mine. Use it via the GPL - I can be arm twisted to do LGPL.


        Comment

        Working...