In the chatterbox today, I asked for help about a "factory" class.

"Factory" in quotes, as the chatterbox denizens quickly set me straight and let me know I didn't have the concept of a factory object right. Thanks all for your help.

I'm still curious about the idea, and wanted to ask the OO design gurus here in SOPW.

Here's my problem/idea:

I was seeking an object that would construct itself as the right type, depending on constructor parameters.

A factory class produces widget objects; it doesn't become a widget. In contrast, I was thinking about something like a seed: a seed doesn't produce plants, it turns itself into a plant.

Here's some pseudo-code:

# untested code # # factory approach my $factory = AnimalFoodFactory->new; my $food_object = AnimalFoodFactory->prepare_correct_chow( animal=> 'lion'); # now ref $food_object eq 'LionFood' # "seed" (?) approach my $food_object = AnimalFoodPreparer->new(animal=> 'lion'); # now ref $food_object eq 'LionFood'
My question: does this approach (a constructor that returns something of the right type depending on its parameters) have a name?

And does the approach make sense, or is Bad Practice?

Curious --

water


In reply to OO: Factory vs. "Seed" (?) pattern by water

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.