Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

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

by fbicknel (Sexton)
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.


Comment on Re^2: Inheritance: parent class determine which child class to use?
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://984601]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (7)
As of 2014-09-20 20:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (163 votes), past polls