Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

Re^2: Inheritance: parent class determine which child class to use?

by fbicknel (Beadle)
on Jul 31, 2012 at 14:05 UTC ( #984601=note: print w/replies, xml ) Need Help??

in reply to Re: Inheritance: parent class determine which child class to use?
in thread Inheritance: parent class determine which child class to use?

Thanks! I made some modifications and used the idea. Mine turned out something like:

1 package Local::Multipath; ... 45 my %mpByType; 46 47 sub new { 48 my ($class, %opts) = @_; 49 return bless \%opts, $class; 50 } 51 52 sub factory { 53 my (%opts) = @_; 54 croak ("Missing parameters!") unless exists $opts{co}; 55 my $type = _whichType; 56 my $module = "Local::Multipath::$type"; 57 { 58 eval "use $module"; 59 } 60 croak "Failed to load module $module: $@\n" if $@; 61 $mpByType{$type}->new (%opts); 62 } 63 64 sub REGISTER_TYPE { 65 my ($type) = @_; 66 my ($name) = $type =~ m/Multipath::(.*)/; 67 $mpByType{$name} = $type; 68 }
1 package Local::Multipath::DMMP; 2 use strict; 3 use warnings; ... 7 8 REGISTER_TYPE Local::Multipath::DMMP; ...
... somewhere else in code land ...
my $mp = Local::Multipath::factory (co => $conf);

The _whichType function returns 'DMMP' or 'Powerpath' after sniffing around for what we actually have.

It's nearly the same as what you suggested, but I didn't need the added 'type' attribute in this case, so simpler.

I could almost get away without the REGISTER_TYPE, but it has the added appeal of not having to hard code the things Multipath can handle. Just add a new module like the DMMP module shown to add new capabilities;

Thanks for the suggestion: perfect synergy.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://984601]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (3)
As of 2017-11-19 02:26 GMT
Find Nodes?
    Voting Booth?
    In order to be able to say "I know Perl", you must have:

    Results (278 votes). Check out past polls.