TanukiEngineerの1歩ずつ進もうよ!

まだまだ駆け出しエンジニアの学習メモ

デザインパターンの種類

23種類のGoFデザインパターンは3つに分類されています。

オブジェクトの生成に関するパターン

  パターン名    説明
Abstract
Factory
アブストラクトファクトリー)
・関連する部品(オブジェクト群)をまとめて一つのシステムを生成するための手順を抽象化
・抽象的な部品を組み合わせて抽象的な製品を作る抽象的な工場
・abstract(アブストラクト)は「抽象的な」という意味で、factory(ファクトリー)は「工場」という意味である
・abstract factoryは「抽象的な工場」という意味である
Builder
(ビルダー)
・元となる専用のクラスを用意し、複数のオブジェクトを生成
・構造を持ったインスタンスを組み上げていく
・一般に構造を持っている大きなものを建築したり構築したりすることを英語でbuild(ビルド)という
Factory
Method
(ファクトリーメソッド)
インスタンス生成のための枠組みと、インスタンス生成のクラスを分離
・クラスを増やし、機能を拡張する際に使用
インスタンスの作り方をスーパークラス側で定め、具体的な肉付けはすべてサブクラス側で行う
・factoryという英単語の意味は、「工場」である
・Factory Methodはインスタンスを生成する工場をTemplate Methodパターンで構成したもの
Prototype
(プロトタイプ)
・クラスからインスタンスを生成するのではなく、インスタンスをコピーして新しいインスタンスを作成(クローンの作成)
・同じクラスで複数のオブジェクトを生成する際に作業を効率化
Singleton
(シングルトン)
・1つのクラスから1つのインスタンスだけを生成するように制限
・singletonとは、要素を1つしか持たない集合のこと
・指定したクラスのインスタンスが絶対に1個しか存在しないことを保証したい場合やインスタンスが1個しか存在しないことをプログラム上で表現したい場合などに使われる

プログラムの構造に関するパターン

パターン名 説明
Adapter
(アダプター)
・本来関連のないクラス同士を関連付ける
・「すでに提供されているもの」と「必要なもの」との間のズレを埋める(インターフェース(API)が異なっているクラス同士を結びつけるパターン)
Bridge
(ブリッジ)
・ 機能を拡張するクラスと実装するクラスを分離し、その間の橋渡しを行う
・継承元のスーパークラスの抽象メソッドを適切に実装したり、サブクラスで機能を拡張する際に利用
・ 2種類のクラス階層を分離することで、それぞれのクラス階層を独立に拡張することができる
・bridge(ブリッジ)というのは「橋」という意味である
Composite
(コンポジット)
・フォルダ内のサブフォルダとファイルの関係のように再帰的な構造を作る際に利用
・composite(コンポジット)とは英語で「混合物」「複合物」という意味
Decorator
(デコレータ)
・透過的なインターフェース(API)を保ったまま、オブジェクトを次々にかぶせて、機能を次々に追加する
・dekorator(デコレータ)とは、「decoreate(デコレート)(飾り付け)するものという意味
Facade
ファサード
・複数のクラスを適切に制御するための「窓口」役のクラスを作成し、その「窓口」から各クラスへ指令を出す
・複雑なシステムに対するシンプルな窓口の役を果たす
・facade(ファサード)はフランス語のfacadeを語源とする単語で、「建物の正面」という意味である
Flyweight
(フライウエイト)
・小さなオブジェクトを数多くロードする必要がある場合にインスタンスを可能な限り共有させて、無駄にインスタンスを作成せずに効率的に処理を行う
flyweightというのは「フライ級」のことで、ボクシングで最も体重が軽い階級を表す
Proxy
(プロキシー
・「代理」に処理を肩代わりさせ、重い処理は必要な時点まで遅らせることが可能
・proxy(プロキシー)という単語は「代理人」という意味である

オブジェクトの振る舞いに関するパターン

  パターン名   説明
Chain of
Responsibility
(チェーンオブレスポンシビリティー
・あるクラスのオブジェクトが処理可能なら処理を行い、
処理不可の場合は他のクラスのオブジェクトに送って処理を実行
・要求するインスタンスを鎖状に並べておき、要求を処理できるかをチェックしていく「たらい回し」のパターン
・responsibility(レスポンシビリティー)とは責任のこと
Command
(コマンド)
・「マウスをクリック」「キーを押す」のような命令をインスタンスという「モノ」で管理
・command(コマンド)という単語は「命令」という意味である
Interpreter
インタプリタ
・プログラムをミニ言語に分け、そのミニ言語を「通訳」するプログラムを作成
・変更が必要な場合はミニ言語を書き換える
interpreterは通訳という意味
Iterator
イテレータ
・複数のオブジェクトを順番に指し示し、全体をスキャンしていく処理を行う(1つ1つ数え上げていく)
・iterate(イテレートという英単語は何かを「繰り返す」という意味である)
Mediator
(メディエイター)
・「相談役」が複雑なオブジェクトの状態を把握し、適切な判断と支持を行う
・複雑に絡み合うオブジェクトたち相互の通信をやめ、Mediator役に情報を集中させることによって処理を整理する
GUIアプリケーションで特に効果的なパターン
・mediatorは英語で「調停者」「仲介者」という意味である
Memento
メメント
インスタンスの状態を表す役割を設け、インスタンスの状態の保存と復元を行う
・Mementoパターンを利用すると、プログラムに対して、
 undo(アンドゥ:やり直し)、
 redo(リドゥ:再実行)、
 history(ヒストリー:作業履歴の作成)、
 snapshot(スナップショット:現在状態の保存)
などを行うことができる
・memento(メメント)という英単語は「記念品」「形見」「思い出の種」という意味である
Observer
(オブザーバ)
・if文を利用することなく、状態変化に対応した処理を実行
・観察対象の状態が変化すると、観察者に対して通知される
・observerとは、観察(observe:オブザーブ)する人、すなわち「観察者」という意味である
State
(ステート)
・状態をクラスとして表現し、クラスを切り替えることで状態の変化を表す
・state(ステート)とは英語で「状態(ものごとのありさま)」を意味する
Strategy
(ストラテジー
アルゴリズムの実装部分が交換可能で、変更が容易
アルゴリズムを切り替えることで、同じ問題を別の方法で解くのを容易にする
・strategy(ストラテジー)というのは、「戦略」という意味である。
Template Method
(テンプレートメソッド)
スーパークラスで処理の枠組みを定め、サブクラスでその具体的な内容を定義する
Visitor
(ビジター)
・データ構造と処理を分離
・データ構造を渡り歩く「訪問者」を表すクラスを用意し、そのクラスが処理を実施
・新しい処理を追加したい場合は新しい「訪問者」を作成
・データ構造側は必要に応じて「訪問者」を受け入れる
・visitor(ビジター)というのは「訪問者」という意味である

参考サイト

Javaデザインパターン全23種の特長をスッキリ解説 | 侍エンジニアブログ

参考書籍

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

Visual Studio Codeの日本語化

Visual Sutudio Code(VS Code)はインストールした状態でデフォルトの設定で英語になっています。 以下は、日本語化したい場合の手順です。

  1. 画面左側のアクティビティーバーから「拡張機能(Extensions)」のアイコンをクリックします。
  2. 拡張機能ビューの検索枠に、「japanese」と入力する。
  3. 右側に「Japanese Language Pack for Visual Studio Code」の詳細が表示されるので「Install」ボタンをクリックします。

    f:id:TanukiEngineer:20210123123647p:plain

  4. 右下に「In order to use VS Code in Japanese. VS Code needs to restart.」とポップアップが表示されるので「Restart Now」ボタンをクリックして再起動します。

    f:id:TanukiEngineer:20210123123948p:plain

  5. VSCodeを再起動すると、日本語表示されていることが確認できます。

    f:id:TanukiEngineer:20210123124357p:plain

Visual Studio Codeのダウンロード・インストール手順

Microsoft社により開発されたオープンソースの高機能ソースコードエディターであるVisual Studio Code(VSCode)エディターのダウンロードおよびインストール手順について

VSCodeのインストールファイルのダウンロード

公式サイトで、ダウンロードページから「Download for Windows」を選択する。
VSCodeの公式サイト

f:id:TanukiEngineer:20210122194241p:plain

インストール手順

ダウンロードが完了したら実行ファイルをダブルクリックする。
画面の指示に従ってインストールする。

使用許諾契約書の同意

  「同意する」にチェックを入れ、「次へ」ボタンをクリックする。

f:id:TanukiEngineer:20210122194353p:plain

インストール先の指定

インストールするフォルダを選択、特に変更する必要がなければデフォルトのまま、「次へ」ボタンをクリックする。

f:id:TanukiEngineer:20210122195756p:plain

スタートメニューフォルダーの指定

変更する必要がなければ「次へ」ボタンをクリックする。

f:id:TanukiEngineer:20210122200401p:plain

追加タスクの選択

必要に応じてチェックを入れ、「次へ」ボタンをクリックする。

f:id:TanukiEngineer:20210122200602p:plain

今回は、次の3つにチェックを追加する。

  • エクスプローラのファイル コンテキスト メニューに[Code で開く]アクションを追加する」
  • エクスプローラーのディレクトリコンテキスト メニューに[Code で開く]アクションを追加する」
  • 「サポートされているファイルの種類のエディターとして、Codeを登録する」

f:id:TanukiEngineer:20210122200726p:plain

インストール準備完了

インストール内容について問題なければ「インストール」ボタンをクリックする。

f:id:TanukiEngineer:20210122200759p:plain

Visual Studio Codeセットアップウィザードの完了

インストールが開始される。
インストールが完了すると、以下の画面が表示されるので、「完了」ボタンをクリックする。

f:id:TanukiEngineer:20210122200925p:plain

VSCodeを頻繁に使用する場合は、スタートメニューやタスクバーにピン止めするとよい。

デザインパターンとは

デザインパターンとは

デザインパターンのメリット

デザインパターンのメリットは主に以下の3つがあります。

  • ベストプラクティスを体得できる
    • 数々のエンジニアが試行錯誤してきた結果を少ない時間で利用、体得できます
  • 再利用性の高いコードを書ける
    • コードが読みやすくなり、修正したり拡張したりする際のメンテナンス性が高まります
  • エンジニア同士の共通言語として使える
    • エンジニアの中には、デザインパターンに親しんだ人も数多くいます
    • そのためデザインパターンが考慮されたコードは、他のエンジニアにとっても読みやすいコードになります

参考サイト:

Javaデザインパターン全23種の特長をスッキリ解説 | 侍エンジニアブログ

今さら聞けない!デザインパターンとは【初心者向け】 | TechAcademyマガジン

頼られるITエンジニアを目指して学習したことをメモに残す

駆け出しエンジニアです(若くはない)。頼られるITエンジニアを目指し、学習したことをメモに残していきます。

自分用の備忘録として、また困っている誰かの参考資料として一助になれば幸いです。

  • これまで学習してきたことをまとめとして残す
  • これから学習していくことをメモを追加していく