デザインパターン

Mooseでデザパタ - Templateパターン

#!/usr/bin/env perl use strict; use warnings; # Template パターン # # Java言語で学ぶデザインパターンと同様の例題をPerl+Mooseで記述した。 # # coded by Dann { package AbstractDisplay; # 抽象クラスAbstractDisplay use Moose::Role; requires &#3…

Mooseでデザパタ - Bridgeパターン

#!/usr/bin/env perl use strict; use warnings; # Bridge パターン # # Java言語で学ぶデザインパターンと同様の例題をPerl+Mooseで記述した。 # # coded by Dann # { package Display; use Moose; has impl => ( is => 'rw', required => 1, handl…

Mooseでデザパタ - Factory Methodパターン

# Factory Method パターン # # Java言語で学ぶデザインパターンと同様の例題をPerl+Mooseで記述した。 # # coded by Dann # { package Product; use Moose::Role; requires 'use'; } { package Factory; use Moose::Role; requires 'create_pro…

Mooseでデザパタ - Proxyパターン

#!/usr/bin/env perl use strict; use warnings; use Perl6::Say; # Proxy パターン # # Java言語で学ぶデザインパターンと同様の例題をPerl+Mooseで記述した。 # # coded by Dann # { package Printable; use Moose::Role; requires 'set_printer_name&…

Mooseでデザパタ - Visitorパターン

#!/usr/bin/env perl use strict; use warnings; # Visitor パターン # # Fileクラスはシステムで定義してあるのでFile以外のクラス名とすること # # 印字内容は検討中 # { package FileNode; use Moose; use Perl6::Say; has name => ( is => 'rw',…

Mooseでデザパタ - Chain Of Responsibilityパターン

#!/usr/bin/env perl { package Trouble; use Moose; has number => ( is => 'rw', isa => 'Int', required => 1 ); } { package Support; use Moose::Role; use Perl6::Say; has name => ( is => 'rw', isa => 'Str', requ…

Mooseでデザパタ - Adapterパターン

{ package Banner; use Moose; use Perl6::Say; has string => ( is => 'rw', isa => 'Str', required => 1 ); sub show_with_paren { my $self = shift; say '( ' . $self->string . ' )'; } sub show_with_aster { my $se…

Mooseでデザパタ - Singletonパターン

#!/usr/bin/env perl use strict; use warnings; use Perl6::Say; { package Single; use MooseX::Singleton; } sub main { my $obj1 = Single->instance; my $obj2 = Single->instance; if ( $obj1 == $obj2 ) { say "obj1とobj2は同じインスタンスです。";…

Mooseでデザパタ - Compositeパターン

#!/usr/bin/env perl use strict; use warnings; { package Entry; use Moose::Role 'requires'; requires 'get_name'; requires 'get_size'; } { package File; use Moose; use Perl6::Say; with 'Entry'; has name => ( i…