use strict;
use warnings;
{
package Abstract::Print;
use strict;
use warnings;
sub printWeak { die ""; }
sub printStrong { die ""; }
}
{
package PrintBanner;
use strict;
use warnings;
use Data::Dumper;
our @ISA = qw/Abstract::Print/;
sub new {
my ($class, $string) = @_;
my $self = {
banner => Banner->new($string),
};
return bless $self, $class;
}
sub printWeak {
$_[0]->{banner}->showWithParen();
}
sub printStrong {
$_[0]->{banner}->showWithAster();
}
}
{
package Banner;
use strict;
use warnings;
sub new {
my ($class, $string) = @_;
my $self = {
string => $string,
};
return bless $self, $class;
}
sub showWithParen {
print "(".$_[0]->{string}.")";
}
sub showWithAster {
print "*".$_[0]->{string}."*";
}
}
my $p = PrintBanner->new('hogemoge');
$p->printWeak();
$p->printStrong();