Thread OO-Vererbung für Plugins
(49 answers)
Opened by marky at 2012-11-27 11:08
Nimm den zweiten Ansatz füge etwas Kreativität hinzu und bekommst das:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 #!/usr/bin/perl use strict; use warnings; ################################################################### package plugin::A; sub SAVE { print "SAVE von plugin::A($_[0]->{val})\n"; } 1; ################################################################### package plugin::B; sub LOAD { print "LOAD von plugin::B($_[0]->{val})\n"; } 1; ################################################################### package plugin::C; sub CONVERT { print "CONVERT von plugin::C($_[0]->{val})\n"; } 1; ################################################################### package klasse; use Digest::MD5 qw(md5_hex); my %used; sub new { my $class=shift; my $val=shift; my $self={ val => $val }; my $obj_unique=$class.'::INSIDE'; $obj_unique.=chr(int(rand(26)+65)) while($used{$obj_unique}); $used{$obj_unique}++; $self=eval(' no strict; @'.$obj_unique.'::ISA=('.$class.'); $self->{ISA}=\@'.$obj_unique.'::ISA; return bless($self,'.$obj_unique.'); '); return $self; } sub SAVE { print "SAVE von klasse($_[0]->{val})\n"; } sub LOAD { print "LOAD von klasse($_[0]->{val})\n"; } sub CONVERT { print "CONVERT von klasse($_[0]->{val})\n"; } sub add_plugins { my $self=shift; for(@_) { unshift(@{$self->{ISA}},$_) if($_); } } 1; ################################################################### ################################################################### ################################################################### package main; my $klasse=klasse->new('TEST1'); $klasse->add_plugins('plugin::A','plugin::C'); $klasse->SAVE; $klasse->LOAD; $klasse->CONVERT; print "\n###########\n\n"; my $klasse2=klasse->new('TEST2'); $klasse2->add_plugins('plugin::B','plugin::C'); $klasse2->SAVE; $klasse2->LOAD; $klasse2->CONVERT; |