/usr/local/CPAN/Class-Interface/Car/Factory.pm
package Car::Factory;
use strict;
use Class::Interface;
&extends('Car::AbstractFactory');
use Car::Fiat;
use Car::Ford;
use Car::Mercedes;
# not using Car::BMW - it requires Class::AccessorMaker which you may
# not have.
sub new {
return bless( {}, ref( $_[0] ) || $_[0] );
}
sub createCar {
my ( $self, $car ) = @_;
my $created;
if ( lc($car) eq "fiat" ) {
$created = Car::Fiat->new();
} elsif ( lc($car) eq "ford" ) {
$created = Car::Ford->new();
} elsif ( lc($car) eq "mercedes" ) {
$created = Car::Mercedes->new();
} elsif ( lc($car) eq "bmw" ) {
eval qq{ use Car::BMW };
$created = Car::BMW->new() unless $@;
} else {
die "Cannot build cars of type $car (yet)";
}
$self->rememberCreatedCar($car);
return $created;
}
1;