Drkcore

15 02 2006 perl designpattern Tweet

Adaptor ( デザパタPerl )

結城さんの本には、委譲と継承の二通りの方法が記載されていたが、その二つの違い(メリット、デメリット)がイマイチ理解できなかったので、ググって見ると、YukiWikiに。

委譲 - Delegation

継承はそのインスタンスのなかの変数を使用するのに対し、委譲では委譲先のインスタンスの中の変数を使用する。(この説明は単に動作の違いを言っているだけかな。) 継承はインスタンスの振る舞い方を規定し、委譲はインスタンスの実装となる。 インスタンスの振る舞い方が変わると、そのインスタンスを利用するほうにも影響が出る。 インスタンスの実装は、使われ方で変わるが、利用するほうには影響が出にくい。

なんとなくわかったような、わからないような。

継承はそのインスタンスのなかの変数を使用するのに対し、委譲では委譲先のインスタンスの中の変数を使用する

というあたりをよく考えてみるといいのだろう。

perlで確認してみると、 サンプルは委譲を使っているので、僕はちょっと継承を用いたperlサンプルを書いてみた。

main.plとBanner.pmはサンプルのものをそのまま使用。interfaceにあたるprinter.pmは使わなかった。

package PrintBanner;
use strict;
use base qw(Banner);

sub new {
    my $class = shift;
    my $string = shift;
    my $self = $class->SUPER::new($string);
    bless $self, $class;
}

sub printweak {
    my $self = shift;
    $self->show_with_paren;
}

sub printstrong {
    my $self = shift;
    $self->show_with_aster;
}

1;

結局AdapteeとTargetの違いの大きさで使い分ければいいのかな?このサンプルだとメソッド名しか変わってないから、委譲を使ったほうがすっきりするのだろうか?

このエントリは結城浩さんの本と、それに載っているサンプルをPerlで書いた例をみながら考えたことをメモってます。あとは、はてなの伊藤さんのjavascriptでの例も参考にしてます。 間違いの指摘とか、もっといいやり方教授してくれたらとても嬉しいゾ。

ProductName 増補改訂版Java言語で学ぶデザインパターン入門
結城 浩
ソフトバンククリエイティブ / 3990円 ( 2004-06-19 )


About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021