User Tools

Site Tools


kurs:oo-factory

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

kurs:oo-factory [2014/09/10 21:22] (current)
Line 1: Line 1:
 +Files:
 +  * lib/Check
 +  * lib/​Check/​Ping.pm
 +  * lib/​Check/​Telnet.pm
 +  * lib/​Check.pm
 +  * t/​AvailCheck.t
 +
 +
 +<​code>​
 +## t/​AvailCheck.t
 +use Test::More tests => 2;
 +BEGIN { use_ok('​AvailCheck'​) };
 +
 +use Data::​Dumper;​
 +
 +my $opt = [
 +    {service => '​ping',​ server=>'​server1'​},​
 +    {service => '​telnet',​ server=>'​server1'​},​
 +    {service => '​telnet',​ server=>'​server2'​},​
 +    {service => '​ping',​ server=>'​server2'​},​
 +];
 +
 +use Check;
 +
 +my $check_factory = Check->​new;​
 +
 +my $check = $check_factory->​get_check_object('​ping'​);​
 +
 +isa_ok($check,​ '​Check::​Ping',​ '​returned Object Check::​Ping'​);​
 +$check->​servername('​server1'​);​
 +$check->​check;​
 +</​code>​
 +
 +<​code>​
 +## lib/​Check.pm
 +package Check;
 +
 +use Moose;
 +
 +use Data::​Dumper;​
 +has '​servername'​ => (is => '​rw',​ isa => '​Str'​);​
 +
 +my $check_factory = {
 +   '​ping' ​   => '​Check::​Ping',​
 +   '​telnet' ​ => '​Check::​Telnet',​
 +};
 +
 +sub get_check_object {
 +  my $self = shift;
 +  my $classname = shift;
 +  my $class = $check_factory->​{$classname};​
 +  eval "​require $class";​
 +  return $class->​new;​
 +}
 +
 +1;
 +</​code>​
 +
 +<​code>​
 +## Check/​Ping.pm
 +package Check::​Ping;​
 +
 +use Moose;
 +extends '​Check';​
 +
 +sub check {
 +  my $self = shift;
 +  print "​Ping";​
 +}
 +
 +1;
 +</​code>​
 +
 +<​code>​
 +## Check/​Telnet.pm
 +package Check::​Telnet;​
 +
 +use Moose;
 +extends '​Check';​
 +
 +sub check {
 +  my $self = shift;
 +  print "​Telnet\n";​
 +}
 +
 +1;
 +</​code>​
 +
 +
 +
  
kurs/oo-factory.txt ยท Last modified: 2014/09/10 21:22 (external edit)