今さら聞けない!デザインパターンとは【初心者向け】
初心者向けにデザインパターンとは何なのか解説し、学習する上でおすすめの本を紹介しています。Webディレクターとして働く上で、複数人のチームで働く上で覚えておきたい内容です。エンジニアも知っておくべきことなので、ぜひご覧ください。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
初心者向けにデザインパターンとは何なのか解説しています。
プログラミングではよく聞く言葉なのですが、しっかりと基本を理解して使っている人は少ないようです。本稿ではデザインパターンの基本的な知識と、おすすめの書籍についてまとめました。
Javaについてそもそもよく分からないという方は、Javaとは何なのか解説した記事をまずご覧ください
なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。
なお、今回の記事の内容は動画でもご覧いただけます。
テキストよりも動画の方が理解しやすいという場合はぜひご覧ください。
田島メンター!!デザインパターンというのは何ですか~?
オブジェクト指向において色んなプログラムで再利用できる設計パターンのことで、1995年に発刊された「オブジェクト指向における再利用のためのデザインパターン」という本で広く知られるようになったんだ。
具体的にはどんなものがあるんですか?
主にオブジェクトの生成に関するもの、プログラムの構造に関するもの、オブジェクトの振る舞いに関するものがあるよ。実際に見てみよう。
目次
デザインパターンとは
デザインパターンとは、JavaやRubyなどのオブジェクト指向の言語で使われる設計パターンのことです。過去のエンジニアが解決してきた方法(設計)が、デザインパターンとしてまとめられているのです。
デザインパターンと言ってもいろいろとあるのですが、最も有名なのはGoF(Gnag of Four)でしょう。「生成」や「構造」、「振る舞い」の3つに分類された、23のパターンがあります。
デザインパターンは体系だっているので、ビギナークラスのエンジニアがオブジェクト指向を学ぶ題材としても役に立つことでしょう。
デザインパターンの目的
デザインパターンに取り組むべき主な目的は、以下の3つです。
ベストプラクティスを体得する
デザインパターンは、設計のベストプラクティスとも言えます。
エンジニアが試行錯誤した結果を、少ない時間で体得する(利用する)ことができるのです。プログラミングの効率化もできますし、先人のアイデアを学ぶこともできるでしょう。
再利用性の高いコードを書く
デザインパターンに取り組むことで、再利用性の高いコードを書くこともできます。コードの見通しも良くなり、メンテナンス性も高まります。
エンジニア同士の共通言語にする
エンジニアの中には、デザインパターンに親しんだ人も数多くいます。そのため、デザインパターンが考慮されたコードは、他のエンジニアにとっても読みやすいコードになります。言わば、エンジニアの共通言語とも言うことができるのです。
デザインパターンの種類
GoFデザインパターンという定番パターンは全部で23種類あります。それぞれ3つに分類され利用されているので、役割を理解しておきましょう。
オブジェクトの生成に関するパターン
Abstract Factory
Factoryクラスを切り替えることでインスタンスを切り替えることが可能です。
Builder
複数のオブジェクトを生成する上で、専用のクラスを用意する際に便利です。
Factory Method
機能が複雑になりクラスが多くなった際に使えるでしょう。一緒に使いたいオブジェクトを生成する際に利用しましょう。
Prototype
同じクラスで複数のオブジェクトを作成する際に便利です。毎回コンストラクタを使ってオブジェクトを生成することなくクローンを生成できるので、作業の効率化が見込めます。
Singleton
オブジェクトを一つだけ生成させるデザインパターンです。1つのクラスから1つのオブジェクトだけと制限する際に使えます。
プログラムの構造に関するパターン
Adapter
本来繋がっていないクラス同士を関連づけることができます。
Bridge
継承元のスーパークラスの抽象メソッドを適切に実装したり、機能を拡張する際に利用すると良いでしょう。
Composite
インターフェースを利用した際に応用の幅が広がります。
Decorator
継承以外の手段で機能を追加することができます。
Facade
1つのメッセージを複数のクラスで処理を行うことができます。複数人で開発する際、クラスを作る人と使う人がいるかと思います。クラスを使う際に楽をさせる作業になるはずです。
Flyweight
小さなオブジェクトを数多くロードする状況で効率的に処理できます。
Proxy
インターフェースとメッセージフックを応用するという点で便利でしょう。
オブジェクトの振る舞いに関するパターン
Chain of Responsibility
メッセージを他のクラスのオブジェクトに送って処理することが可能です。
Command
命令を表すオブジェクトをメソッドの引数にすることで、1つの引数で複数のデータと処理を伝えることができます。
Interpreter
インターフェースを使って、構文解析の結果をツリー構造で表示します。
Iterator
オブジェクト間の関連をシンプルにすることができます。複数のつながりをシンプルにできるでしょう。
Mediator
クラス間の疎結合を綺麗に整理することができます。複数のオブジェクトを組み合わせて機能を実装する際に使えます。
Memento
オブジェクトの状態を保存したまま元の状態に復元することができます。
Observer
あるオブジェクトの変化を別のオブジェクトに通知させることが可能です。
State
if文を利用することなく、状態に対応した処理を行うことができます。
Strategy
クラスを使う人のコードを変更することなくアルゴリズムを変更することが可能になります。
Template Method
メソッドの機能を部分的に変更するために便利でしょう。
Visitor
利用頻度は少ないかもしれませんが、オブジェクトに動的に機能を追加するために利用できます。
「オブジェクト指向における再利用のためのデザインパターン」で取り上げられている23種類のデザインパターンだよ。
それぞれが先ほどの3つの種類に分類されているんですね。
この本はGang of Fourと呼ばれる4人によって書かれたため、GoF本ともいわれるんだ。今は色々な書籍でこのパターンについての解説がされているよ。
デザインパターンの学習におすすめの本
最後に、デザインパターンのおすすめの書籍をご紹介しておきましょう。デザインパターンの入門書として活用してください。
増補改訂版Java言語で学ぶデザインパターン入門
最も有名なデザインパターンであるGoFの23パターンを、Java言語を使って解説してある本です。
初心者でも理解できるようにわかりやすく書いてあるので、デザインパターンの入門書としておすすめです。
独習デザインパターン
Java言語を題材に、デザインパターンについて平易な内容で説明してある入門書です。
事例がたくさん盛り込まれているところもいい点です。
オブジェクト指向における再利用のためのデザインパターン
デザインパターンのバイブル的存在の書籍です。デザインパターンの王道であるGoFをJavaを使って紹介しているのですが、内容的にはボリュームがあります。読み終えるには時間がかかるかもしれません。
デザインパターンの基礎知識と、おすすめの書籍についてご紹介しました。デザインパターンは知識として持っておくだけでは意味がありません。積極的に使っていただき、日々のプログラミングを効率化していっていただければと思います。
最後に、デザインパターンに関する学習書籍を紹介したよ。
初めて勉強するならどれがいいでしょうか?
まずは「増補改訂版Java言語で学ぶデザインパターン入門」を読んでみるのがいいんじゃないかな。GoFの23のパターンを分かりやすく解説しているので、基礎を学ぶのに適していると思うよ。
なるほど、分かりました!ありがとうございます!
入門向けのJava学習サイトも紹介しているので、合わせてご覧ください。
また、オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。
JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。
現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、習得することが可能です。