Skip to content

Commit

Permalink
add perl version bridge pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
oxnz committed Feb 12, 2014
1 parent f1716bf commit 46a8e6b
Show file tree
Hide file tree
Showing 7 changed files with 111 additions and 1 deletion.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ observer | [DONE](./src/observer/observer.md) | [DONE](./src/observer/cpp) | [DO
template | [DONE](./src/template/template.md) | [DONE](./src/template/cpp) | [DONE](./src/template/java) | [DONE](./src/template/python) | [DONE](./src/template/php)
adapter | [DONE](./src/adapter/adapter.md) | [DONE](./src/adapter/cpp) | [DONE](./src/adapter/java) | [DONE](./src/adapter/python) | [DONE](./src/adapter/php) | [DONE](./src/adapter/perl)
flyweight | [DONE](./src/flyweight/flyweight.md) | [DONE](./src/flyweight/cpp) | [DONE](./src/flyweight/java) | [DONE](./src/flyweight/python) | [DONE](./src/flyweight/php)
bridge | [DONE](./src/bridge/bridge.md) | [DONE](./src/bridge/cpp) | [DONE](./src/bridge/java) | [DONE](./src/bridge/python) | [DONE](./src/bridge/php)
bridge | [DONE](./src/bridge/bridge.md) | [DONE](./src/bridge/cpp) | [DONE](./src/bridge/java) | [DONE](./src/bridge/python) | [DONE](./src/bridge/php) | [DONE](./src/bridge/perl)
composite | [DONE](./src/composite/composite.md) | [DONE](./src/composite/cpp) | [DONE](./src/composite/java) | [DONE](./src/composite/python) | [DONE](./src/composite/php)
interpreter | [DONE](./src/interpreter/interpreter.md) | [DONE](./src/interpreter/cpp) | [DONE](./src/interpreter/java) | [TODO] | [DONE](./src/interpreter/php)
mediator | [DONE](./src/mediator/mediator.md) | [DONE](./src/mediator/cpp) | [DONE](./src/mediator/java) | [DONE](./src/mediator/python) | [DONE](./src/mediator/php) | [DONE](./src/mediator/perl)
Expand Down
25 changes: 25 additions & 0 deletions src/bridge/perl/Abstraction.pm
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package Abstraction;

use strict;
use warnings;

sub new {
my ($class, $imp) = @_;
my $self = {
imp => $imp,
};
return bless $self, $class;
}

sub implementator {
my ($self, $imp) = @_;
$self->{imp} = $imp if defined $imp;
return $self->{imp};
}

sub operate {
my $self = shift;
$self->{imp}->operateImp;
}

1;
16 changes: 16 additions & 0 deletions src/bridge/perl/Abstraction/RefinedAbstraction.pm
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package Abstraction::RefinedAbstraction;
use parent Abstraction;

sub new {
my ($class, $imp) = @_;
my $self = $class->SUPER::new($imp);
return $self;
}

sub operate {
my $self = shift;
print ref $self, " operate:\n";
$self->{imp}->operateImp;
}

1;
16 changes: 16 additions & 0 deletions src/bridge/perl/Implementator.pm
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package Implementator;

use strict;
use warnings;

sub new {
my ($class, $args) = @_;
my $self = {};
return bless $self, $class;
}

sub operateImp {
die "ABSTRACT CLASS METHOD CANNOT BE CALLED DIRECTLY\n";
}

1;
18 changes: 18 additions & 0 deletions src/bridge/perl/Implementator/ConcreteImplementatorA.pm
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package Implementator::ConcreteImplementatorA;
use parent Implementator;

use strict;
use warnings;

sub new {
my ($class, $args) = @_;
my $self = $class->SUPER::new($args);
return $self;
}

sub operateImp {
my $self = shift;
print ref $self, " operate Imp\n";
}

1;
18 changes: 18 additions & 0 deletions src/bridge/perl/Implementator/ConcreteImplementatorB.pm
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package Implementator::ConcreteImplementatorB;
use parent Implementator;

use strict;
use warnings;

sub new {
my ($class, $args) = @_;
my $self = $class->SUPER::new($args);
return $self;
}

sub operateImp {
my $self = shift;
print ref $self, " operate Imp\n";
}

1;
17 changes: 17 additions & 0 deletions src/bridge/perl/test.pl
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env perl
# auther: oxnz
# coding: utf-8

use strict;
use warnings;

use Abstraction::RefinedAbstraction;
use Implementator::ConcreteImplementatorA;
use Implementator::ConcreteImplementatorB;

my $abs = Abstraction::RefinedAbstraction->new(
Implementator::ConcreteImplementatorA->new);
$abs->operate;
$abs = Abstraction::RefinedAbstraction->new(
Implementator::ConcreteImplementatorB->new);
$abs->operate;

0 comments on commit 46a8e6b

Please sign in to comment.