Javaコラム Javaエンジニアのためのお役立ちコラム

Javaのデザインパターン23種類|活用するメリット3つとは?

2021年02月05日
SE
Javaのデザインパターンとはどのようなものなのでしょうか。
PM
設計書に記載されている内容をオブジェクト指向の言語でパターン化したものです。

目次

プログラミングでよく聞くデザインパターンとは?


プログラミングにはデザインパターンというものがあります。デザインパターンとは、設計書に記載されている内容をオブジェクト指向の言語でパターン化したものです。 デザインパターンは23種類あります。

オブジェクト指向の言語とは、コンピューターに動作や処理させるためのJava、Ruby、PHP、JavaScript、Swift、C++などのプログラミング言語のことです。

Javaのデザインパターン23種類


Javaのデザインパターンについてみていきましょう。Javaのデザインパターンは23種類です。デザインパターン化すればどのようなメリットがあるのでしょうか。

デザインパターン化すれば「設計業務の効率化を図ることができる」「正確に動作し無駄のないコードを書ける」「メンテナンス性が高くなる」などのメリットがあります。

構造に関連したデザインパターン7つ

まずは、構造に関連したデザインパターンについてみていきましょう。構造に関連したデザインパターンは「Composite」「Adapter」「 Bridge」「Flyweight」「Decorator」「Facade 」「Proxy」の7つです。7つのデザインパターンの概要と役割についてみていきます。

Javaのデザインパターン1:Composite

Javaのデザインパターン「Composite」は、ファイルシステムの中にあるファイルとフォルダの中身を同じものとみなすことができます。

コンピューターに動作や処理させるデータが保存されているフォルダとファイルを削除したいときには、フォルダかファイルの中身の確認が必要です。しかし「Composite」のデザインパターンを使えば、中身が同じものとみなすことができるため確認の必要がありません。

Javaのデザインパターン2:Adapter

Javaのデザインパターン「Adapter」は、本来つながっていないコンピューターに動作や処理させるデータ同士を関連づけるためのパターンです。

ほかに コンピューターに動作や処理をおこなうすぐれているデータがある場合は、ふたつのメソッドのインタフェースの違いを吸収するパターンとなるのがAdapterです。

つながっていないインタフェースは互換性が無いため使うことができませんが「Adapter」デザインパターンを使えば、使うことを可能にしてくれるのです。

Javaのデザインパターン3:Bridge

Javaのデザインパターン「Bridge」は、機能と実装を別々にして拡張することを可能にします。

コンピューターの操作や処理させるデータと実装が異なることがあります。データと実装が異なっていてはコンピューターの命令が正しく伝わらなくなります。

データと実装を同じにするためにはデータの作成が必要です。デザインパターン「Bridge」を使えば、データ作成せずに、組み合わせで利用することができるようになります。

Javaのデザインパターン4:Flyweight

Javaのデザインパターン「Flyweight」は、設計図に記載されている処理内容などを実体化することで、メモリやファイルなどプログラム以外を無駄なく使う役割があるパターンのことです。

「Flyweight」のデザインパターンを使うことで、設計図の実体化によって無駄な生成を防ぐことができ、メモリやファイルなどに無駄がない使い方になります。

Javaのデザインパターン5:Decorator

Javaのデザインパターン「Decorator」は、オブジェクトにデコレーションを追加できるパターンです。つまり、Decoratorの重要な部分に機能拡張ができるということになります。

デザインパターン「Decorator」を使えば、さまざまな組合せでのデコレーションや機能の追加ができるということです。

Javaのデザインパターン6:Facade

Javaのデザインパターン「Facade」は、コンピューターの動作や処理させるデータ作りが楽にできるようになります。 正常に動作や処理させるためには、データを使う手順が大事です。

デザインパターン「Facade」を使えば、1つのメッセージで複数のことを処理してくれるようになります。つまり、複数の組み合わせをシンプルにして使うことができます。

Javaのデザインパターン7:Proxy

Javaのデザインパターン「Proxy」は、処理できないオブジェクトをメッセージフックの応用でできるようになります。つまり、キー入力やマウス操作のメッセージに独自の処理追加ができるようになるということです。

デザインパターン「Proxy」を使えば、処理できないオブジェクトを代わりに処理してもらえるようになります。

振る舞いに関連したデザインパターン11個

振る舞いに関連したデザインパターンについてみていきましょう。

振る舞いに関連デザインパターンは「Iterator」「Chain of Responsibility」「Command」「Interpreter」「Memento」「Mediator」「State」「Strategy」「Observer」「Template Method」「Visitor」の11個です。

Javaのデザインパターン1:Iterator

Javaのデザインパターン「Iterator」は、繰り返しの実装方法が求められている状況で役立つデザインパターンです。プログラムの簡素化のためのオブジェクトの要素を反復処理するパターンになります。

オブジェクトの要素を順番に操作することを可能にするのが「Iterator」デザインパターンです。

Javaのデザインパターン2:Chain of Responsibility

Javaのデザインパターン「Chain of Responsibility」は、責任の連鎖関係を構築するパターンです。例えば、企業など決算の責任者は、ステップごとに責任を取れる人が変わります。

「Chain of Responsibility」は、どのステップで誰が責任を取ったのかが表現できるパターンになります。

ステップごとの責任者を限定できるため責任者をクラスとして分割できるようになり、連鎖関係の構築の変更も柔軟にできるようになります。

Javaのデザインパターン3:Command

Javaのデザインパターン「Command」は、データとメソッドを一つのオブジェクトにまとめるための役割があるパターンです。 実行に必要なデータをオブジェクトにまとめることで引数の数や種類を増やす必要がなくなります。

引数の数や種類を増やすことには限界があり、「Command」ならオブジェクトを引数として渡せるため、要求に対して引数の数や種類を増やす必要がないのです。

Javaのデザインパターン4:Interpreter

Javaのデザインパターン「Interpreter」は、プログラム言語を解析し、得られた結果の手順に基づき処理・実行するパターンです。

処理をひとつのデータとして表現できます。つまり、処理対象と処理結果をおなじと見なすことができるため解析結果に合わせて処理・実行が可能になるのです。

Javaのデザインパターン5:Memento

Javaのデザインパターン「Memento」は、コンピューターの操作・処理のデータの、保存と復元を可能にするパターンです。 コンピューターの操作・処理の状態を覚えておき瞬間にカプセル化できるためデータが破壊されずに残り、必要なデータのみ復元を可能にします。

Javaのデザインパターン6:Mediator

Javaのデザインパターン「Mediator」は、オブジェクト間の関係を調整する役割があるパターンです。 各オブジェクトからの問い合わせから、その時々に適したやり方で判断し、オブジェクト間の関係を仲介者として処理するように指示を出すパターンになります。

各オブジェクの間で起こる問題を解決する手段として「Mediator」のデザインパターンが役に立つということです。

Javaのデザインパターン7:State

Javaのデザインパターン「State」は、物ではなく状態を設計図データとして表現できるパターンです。 状態ごとに設計図データの表現が可能になります。

つまり、1つの状態で1つの設計図データができることになります。状態ごとに設計図データが表現できれば、項目の漏れや抜けを防ぐことや状態の変化に対応が可能です。

Javaのデザインパターン8:Strategy

Javaのデザインパターン「Strategy」は、簡単にアルゴリズムの切り替えと追加を可能にするパターンです。 アルゴリズムつまり、コンピューターに操作・処理の行動を起こさせる手順の切り替えと追加が可能になるということです。

オブジェクトに対する操作の中にアルゴリズムを実装するのが普通のプログラミングです。「Strategy」を利用することで使う人に意識させる事なく、アルゴリズムの変更・追加ができるようになります。

Javaのデザインパターン9:Observer

Javaのデザインパターン「Observer」は、観察対象のオブジェクトから状態変化を通知するパターンです。

観察対象のオブジェクトのインタフェースの処理手続を定めて、コンピューターの操作・処理に変更が発生した場合に、観察者へ通知する仕組みです。「Observer」を利用することで、観察者の追加と表題の追加が簡単にできるようになります。

Javaのデザインパターン10:Template Method

Javaのデザインパターン「Template Method」は、定型の記載機能を持っているパターンです。例えば、議事録を作成すると仮定し、「日時」「場所」「参加者」「議題」「決定事項」などの項目が固定している場合は記載する必要がありません。

「Template Method」は、この機能を持っているデザインパターンなのです。「Template Method」を使えば定型の記載内容を簡単に呼び出すことが可能になります。

Javaのデザインパターン11:Visitor

Javaのデザインパターン「Visitor」は、操作を追加できる柔軟性のあるパターンです。「Visitor」は、さまざまなデータオブジェクトがあります。データオブジェクトは属性でなく、事前に定義された基本データ型になっています。

そのため新しい操作を追加できる柔軟性があります。1つのはずだった操作に多くの操作が存在した場合に便利なデザインパターンです。

生成に関連したデザインパターン5つ

生成に関連したデザインパターンにはどのようなものがあるのか、みていきましょう。生成に関連したデザインパターンは「Prototype 」「Abstract Factory」「Factory Method」「 Builder 」「Singleton」の5つです。

Javaのデザインパターン1:Prototype

Javaのデザインパターン「Prototype」は、原型からコンピューターの操作・処理を生成するようにするためのパターンです。原型のオブジェクトを使うため、新たに発生するコストを回避できます。

「Prototype」は、複製元として後で改良できる原型を蓄えておくことが可能です。そのため新たに生成するオブジェクトの全ての属性が複製できます。

Javaのデザインパターン2:Abstract Factory

Javaのデザインパターン「Abstract Factory」は、オブジェクトの追加と変更が簡単にできるようになるパターンです。オブジェクトの追加が簡単にできるため、間違ったオブジェクトを利用しなくなりプログラマーの書き方のミスを減らすことが可能になります。

Javaのデザインパターン3:Factory Method

Javaのデザインパターン「Factory Method」は、フレームワークの役割とオブジェクトを作成する役割りの定義が可能になります。

オブジェクト作成のためのフレームワークつまり、手順のパターン化が可能です。オブジェクト作成を柔軟にするためのデザインパターンになります。

Javaのデザインパターン4:Builder

Javaのデザインパターン「Builder」は、操作と生成の分離を可能にしたデザインパターンです。作成過程と違った実体形式を可能にします。

「Builder」を使うことで作成過程と実体形式の要望に柔軟に対応できるようになります。 つまり、作成過程と実体形式の用途の幅が広がります。

Javaのデザインパターン5:Singleton

Javaのデザインパターン「Singleton」は、実体の中で唯一の生成を保証するデザインパターンです。 「Singleton」は、オブジェクト指向のプログラミング言語の初期化を行う関数で定義されています。

そのためコンピューター処理・実行させる場合は、Singletonの属性や操作からしかアクセスできないのです。

Javaのデザインパターンを活用するメリット3つ


Javaのデザインパターンを活用するメリットについてみていきましょう。Javaのデザインパターンを活用するメリットは「エンジニアの考え方を短時間で体得できる」「再利用性が高い」「他のエンジニアにも読みやすい」の3つです。

それぞれのメリットごとに詳しくみていきます。

デザインパターンを活用するメリット1:エンジニアの考え方を短時間で体得できる

デザインパターンを活用することで、エンジニア同士の考えがお互い理解しやすくなります。デザインパターンを1つの設計技術として使えるからです。

例えば、一人のエンジニアが、このデザインパターンでやりましょうと言った場合は、他のエンジニアならすぐに理解できます。つまり、デザインパターンを活用することで意思疎通が簡単にできるようになるのです。

デザインパターンを活用するメリット2:再利用性が高い

デザインパターンは、再利用性が高いのがメリットです。デザインパターンは、設計者の直感や経験といった実績に基づく設計方法を再利用化したものなので再利用率が高くなります。

つまり、デザインパターンを活用することは、初心者でも実績のある設計ができるようになるということです。 デザインパターンを活用することは、初心者の設計技術の向上につながるため再利用率が高くなります。

デザインパターンを活用するメリット3:他のエンジニアにも読みやすい

デザインパターンを活用するメリットは、他のエンジニアにも読みやすいことです。経験の浅いエンジニアには、読みやすいソースコードを書くことの重要さを理解することは難しくなります。

そのため、クライアントや他のエンジニアがソースコードを読めないこともあります。しかしデザインパターンを活用することで、他のエンジニアでも読めるようになるのです。

Javaのデザインパターンを理解するのにおすすめの本2選


Javaのデザインパターンの適用場面、パターンごとのメリットなど独学で学びたい人たちに理解しやすいおすすめ本についてご紹介します。

Javaのデザインパターンを理解するのにおすすめの本は「独習デザインパターン」「増補改訂版Java言語で学ぶデザインパターン入門」の2冊です。 Javaのデザインパターン理解におすすめの本を詳しくみていきましょう。

独習デザインパターン

「独習デザインパターン」は、Javaのデザインパターンが理解しやすいおすすめの本です。デザインパターン23種類について丁寧な説明とともに、適用場面が多いデザインパターンをより詳しく説明している実践向きな本です。

デザインパターンごとのメリットについて説明されており、過去にデザインパターンの本を購入して理解できなかったことが分かるようになったと評判の本です。

増補改訂版Java言語で学ぶデザインパターン入門

「増補改訂版Java言語で学ぶデザインパターン入門」は、Java全般が学べるおすすめの本です。Javaとは、どんなデザインパターンがあって、どのような使い方をするのかなどを練習問題方式で学ぶことができます。

イラストで説明されているので分かりやすくデザインパターンを深く理解できるため、オブジェクト指向に興味のある人におすすめです。

SE
javaにはさまざまなデザインパターンがあるのですね。
PM
Javaのデザインパターンを覚えると、就職や転職に有利になります。この機会に覚えておきましょう。

Javaのデザインパターンを理解して転職に活かそう


アプリやシステム開発に使用するプログラム言語にはC/C++・Python・SQLなど数多くあります。プログラム言語の中でも人気が高いのがJavaです。Javaは、Google検索でも上位のシェアを持つプログラミング言語です。

Javaのプログラム言語は、物としてプログラムを見ることが可能になるため、使いやすいプログラム言語として世界中で多く使われています。

そんな人気があって、需要が高いJavaのデザインパターンを覚えることは、就職や転職に有利になります。就職や転職を有利にするためにJavaのデザインパターンを覚えましょう。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

recommended

Categories

Tags

Jobs