PerlでFacade

昨夜は素敵なBBQでした。
毎年ビール・ワイン・チューハイ・日本酒・シャンパンをチャンポンしてしまうので
二日酔いは必須です。

写真 1 iPhone 5s (4.12mm, f/2.2, 1/30 sec, ISO40)

写真 2 iPhone 5s (4.12mm, f/2.2, 1/1001 sec, ISO64)

写真 3

夏休みも終盤にさしかかり、最近はひたすらオライリーを読破してましたが
デザインパターン最後のFacadeを書いてみたのです。

Facadeの特徴は複数のクラスを束ねて一つのクラスで制御できるようにするという
シンプルなものですが、これってかなり使いますよね。

んー、僕なんかがよくやるのはOracleとかのDBと組み合わせて処理をする必要があるときに
いちいちつないで、SELECTして、ファイルに吐き出してとかが面倒なんで、
一つクラス作って、クライアントからは呼び出すだけにするような設計にします。
今回のサンプルコードははSayWowと猛る処理にしてみました。

ファイルは毎度このへんに。

GitHub Facade

ファイル構成は・・・
・Each.pm
個々のクラスを記述しています。
・Facade.pm
Each.pmのクラスを束ねるクラスの記述です。
・Client.pm
ユーザーの処理を記述しています。

では個々のコードを見て行きましょう。

[Perl]
use utf8;
#———————————-
# Name:Each.pm
#———————————-
use warnings;
use strict;

package ClassA;
sub new{
my $self=shift;
bless {},$self;
}

sub sayWow {
print “Everybody\n”;
};

package ClassB;

sub new{
my $self=shift;
bless {},$self;
}
sub sayWow {
print “Say!!\n”;
};

package ClassC;

sub new{
my $self=shift;
bless {},$self;
}
sub sayWow {
print “WowWow!!!!!!!!\n”;
};
1;
[/Perl]

今回はMooseを使わずに、無名ハッシュをシンプルにblessしています。
個々のクラスについてはSayWowメソッドでprintするだけという処理です。

[Perl]
use utf8;
#———————————-
# Name:Facade.pm
#———————————-
use warnings;
use strict;
use Each;
package Facade;

sub new {
my $self = shift;
bless {},$self;

};
sub Say {
my $classA=ClassA->new();
my $classB=ClassB->new();
my $classC=ClassC->new();

$classA->sayWow();
$classB->sayWow();
$classC->sayWow();

};
1;
[/Perl]

こちらは個々のクラスを束ねるFacadeクラスです。
Sayメソッドで、各々のクラスをnewして、SayWowメソッドを呼び出しています。
最後にユーザーコード。

[Perl]
use utf8;
#———————————-
# Name:Client.pl
#———————————-
use warnings;
use strict;
use Facade;

my $f = Facade->new();

$f->Say();

[/Perl]

シンプルにFacadeクラスをnewして、Sayメソッドを呼ぶだけですね。
こうすることで、ユーザーはFacadeクラスだけを意識して、開発することが出来ます。
実行するとこんな感じ。

[Shell]
[Facade]$perl Client.pl
Everybody
Say!!
WowWow!!!!!!!!
[Facade]$
[/Shell]

ここまででデザインパターンは一段落し、明日から沖縄に行ってリフレッシュした後、
rubyを触っていこうかと思っております。
皆さん、三連休良いバカンスを♥