デザインパターン一覧

デザインパターンは、設計ノウハウに名前をつけて、再利用できるようにカタログ化したものです。ここでは、「パターンを身につけるメリット」や「身につけ方」について考えてみます。

身につけるメリット

次のようなメリットがあると言われてます。

  • ソフトウェア開発で頻繁に出くわす課題に対して、パターンを持って解決することで生産性を高められる
  • 設計方法に名前をつけることで、開発者同士の共有ボキャブラリとなり、設計意図を即座に理解できる

デザインパターンを身につけることで、
「技術の移り変わりに依存しない」
「言語に依存しない」
エンジニアとしての基盤スキルを高めることができるかと思います。

参考書

Design Patterns: Elements of Reusable Object-Oriented Software

デザインパターンはいくつかあるのですが、GoFデザインパターンが最も有名ではないでしょうか。1994年、GoFと呼ばれる4人の共著者が、下記書籍で23個のデザインパターンを取り上げました。

翻訳もされてますね。ただし、名著ではあるが「もっとわかりやすい情報がある」「翻訳が良くない」などのレビューがあがっています。私自身、読んだことはないです。

Head Firstデザインパターン

個人的には、「Head Firstデザインパターン」という書籍を読み、理解が深まりました。いろいろなアプローチでデザインパターンについて解説されており、読者に理解させようという気持ちがこもった良本です。

Head Firstデザインパターンで学ぶ

利用頻度の高いパターンを身につける

「Head Firstデザインパターン」では、23個あるGoFパターンを以下のように取り扱い、解説してます。

  • 頻繁に利用されるパターンは章立てして解説
  • その他のパターンは付録として解説

1994年に考えられたパターンとだけあって、現代では特に使う機会やメリットのないパターンも多いようです。なので、「頻繁に利用されるパターンだけ理解しとく」でも良いかなと思ってます。

パターンのカテゴリ化

また、パターンは以下のようにカテゴリ化されて紹介されることがあります。
「Head Firstデザインパターン」でもパターンのカテゴリ化について紹介してます。(p.520)

目的でカテゴリ化

目的 概要
作成パターン クライアントが直接インスタンスを作成せずに、インスタンス作成を依頼するパターン。
直接作成せず依頼することにより、インスタンスを品質制御できる。
構造パターン プログラムの構造に関するパターン
振舞いパターン オブジェクトの振舞いに関するパターン

パターンで利用している関係でカテゴリ化

関係 概要
クラスパターン
「is-a」(~である)
継承を利用したパターン。
静的に関係が決まる。
オブジェクトパターン
「has-a」(〜を持つ)
適切なオブジェクトを持たせる。
コンポジション(composition:構成)を利用したパターン。
動的に関係を決定できる。

パターン一覧

上記踏まえて、パターン一覧を整理します。
Head First以外の参考情報として、wikiDesignPatternsPHPへのリンクも貼っておきます。

作成パターン
パターン 利用している関係 Head Firstでの取り扱い link
Factory Method クラス 4章 Wiki DesignPatternsPHP
Abstract Factory 4章 Wiki DesignPatternsPHP
Singleton 5章 Wiki DesignPatternsPHP
Builder 付録(p.546) Wiki DesignPatternsPHP
Prototype 付録(p.558) Wiki DesignPatternsPHP
構造パターン
パターン 利用している関係 Head Firstでの取り扱い link
Decorator オブジェクト 3章 Wiki DesignPatternsPHP
Adapter クラス 7章 Wiki DesignPatternsPHP
Facade オブジェクト 7章 Wiki DesignPatternsPHP
Composite オブジェクト 9章 Wiki DesignPatternsPHP
Proxy オブジェクト 付録(p.542) Wiki DesignPatternsPHP
Bridge オブジェクト 付録(p.544) Wiki DesignPatternsPHP
Flyweight 付録(p.550) Wiki DesignPatternsPHP
振舞いパターン
パターン 利用している関係 Head Firstでの取り扱い link
Strategy オブジェクト 1章 Wiki DesignPatternsPHP
Observer オブジェクト 2章 Wiki DesignPatternsPHP
Command オブジェクト 6章 Wiki DesignPatternsPHP
Template Method クラス 8章 Wiki DesignPatternsPHP
Iterator オブジェクト 9章 Wiki DesignPatternsPHP
State 10章 Wiki DesignPatternsPHP
Chain of Responsibility オブジェクト 付録(p.548) Wiki DesignPatternsPHP
Interpreter クラス 付録(p.552) Wiki
Mediator オブジェクト 付録(p.554) Wiki DesignPatternsPHP
Memento オブジェクト 付録(p.556) Wiki DesignPatternsPHP
Visitor オブジェクト 付録(p.560) Wiki DesignPatternsPHP

UMLの見方

「Head Firstデザインパターン」では、擬似UMLを利用してます。has-aの関係だけ、OMG(Object Management Group)のUMLと表記が異なるので注意します。

has-a

Head FirstのUML表記 一般的なUML表記
446-design-pattern-has-a-1.png 集約
446-design-pattern-has-a-2.png

コンポジション
(部分だけで存在できない。強い集約。)
446-design-pattern-has-a-3.png

is-a (extends)

446-design-pattern-extends.png

implements

446-design-pattern-implements.png

参考)

原則を重視

「Head Firstデザイン」では、パターンの利点について述べながらも、パターンは道具でしかないことについて述べている点も良かったです。パターンを追加することで、逆にシステムが複雑になったりすることもあるので、設計原則からはじめることを推奨しています。

本書を読むことで以下のような設計原則についても理解を深められます。

  • 変化する部分を特定しカプセル化して、不変な部分と分離する。
  • 継承よりコンポジションを好む。
  • クラスは、変更される理由を1つだけ持つべきである。
【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。