IteratorパターンとAdapterパターンのメリットとは?2019-04-30IteratorパターンとAdapterパターンのメリットとは?デザインパターンはじめにとあるエンジニアの方からデザインパターンは知っておいた方がいいと聞いたので勉強し始めました。使用する教材は有名な「Java言語で学ぶデザインパターン入門」です。この本は第一部から第十部まであるのですが、この記事では第一部についてまとめました。第一部で登場するデザインパターンは以下の2つです。IteratorパターンAdapterパターンデザインパターンとは?デザインパターンとはGoF(有名な4人らしい)が考えた23個の設計パターンのことです。デザインパターンに当てはめることで、再利用しやすいプログラムを作れますし、知っているだけでもプログラムの構造について議論する時に役立ちます。IteratorパターンIteratorパターンはループ変数の働きを抽象化したもので、集合体の各要素を順に指し示していくパターンです。読んでいる途中は、イテレータをわざわざ実装する意味があるのか?for文で良くない?と思っていたのですが、読み終えてそのメリットが分かりました。数え上げる側が集合体クラスの実装(配列なのか、ベクトルなのかなど)について知っておく必要があります。集合体クラスに対応したイテレータクラスを用意しておくと、そのイテレータインスタンスを使って数え上げられます。数え上げる側は集合体クラスの実装については知らなくても問題ありません。これがイテレータを実装するメリットです。AdapterパターンAdapterはWrapperともいい、「すでにあるプログラム」と「必要としている機能」とのずれを埋めるようなデザインパターンです。あるプログラムを利用して、必要としている機能を実現します。Adapterパターンの実装には以下の2種類があります。継承を使う(すでにあるプログラムを継承してそのメソッドを使う)委譲を使う(すでにあるプログラムのインスタンスを作成し、インスタンスを通してメソッドを使う)継承使ったAdapterパターンのプログラム継承を使う方のサンプルプログラムを作ってみました。(デザインパターンを学習するには自分で例を考えてみるのが良いらしいです)Adaptee.javaすでにあるプログラム。引数の数値を標準出力する機能を持つ。}}Target.java必要としているインタフェース・機能。引数の文字列を数値に変えて標準出力する機能を持つ。num);}Adapter.javaすでにあるプログラムと必要としている機能とのずれを埋めるアダプター。ある機能printNum()を使って、必要な機能printStringToNum()を実現する。}}Main.java新たなインタフェースを使うクラス。}}この例は簡単で、すでに数値を表示するプログラムAdaptee.javaがあって、それには一切手を加えず、文字列を数値として表示するような機能Target.javaを使えるようにするものです。ポイントはprintStringToNum()の中で、スーパークラスのprintNum()を呼び出している点です。Mainクラスの中でAdapterインスタンスをTarget型の変数に格納して、Targetのインタフェースを使っている点も要チェックです。AdapterパターンのメリットAdapterパターンは、すでにテスト済みのプログラムがあり、それを新たなAPIに対応させる場合に使われます。あるプログラムを修正する方が簡単そうに見えますが、そうするとせっかくテスト済みだったプログラムをもう一回テストしないといけなくなって面倒です。新たにAdapterを作った場合はテストするのはAdapterのみで済むのでバグも発見しやすくなります。おわりに第一部を読んでみて、デザインパターンはクラスの再利用化を促進するためにあって、そのためには抽象クラスやインタフェースを積極的に使っていかんとだめなのねって感じです。第二部以降も読み進みてまとめていこうと思います。Code】BlackとFlake8を使ってきれいなPythonコードを書く!!スポンサーリンクプロフィール応用情報取得。3度の学会発表経験あり。使用言語は主にPythonとSwift。(1)月別アーカイブ検索このブログについてプライバシーポリシースポンサーリンクスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。