どんな書き方が正しいの?(デザインパターン) - TejimaTuyoshi/returnread GitHub Wiki

Template Method =>継承をする際に使用される。基底を参考にしてクラスを作成する方法。

Singleton => シングルトンとは、「一つしか存在が許されない」、ということを保証する実装。他のクラスやコードから、このクラスを作成できなくなる。

グローバル変数として使う所もあるが、好き嫌いが激しい。考えることが少なくなるので効率的で「手放し系」ならOK。

Flyweight => Singletonの別名。ただ、「やっていることは少し違う」。自分が持っているデータから返す行為をする。

自分が持っておくのではなく、探して持ってくるやり方なので「同類別種」である。

Factory => Abstract FactoryパターンとFactory Methodパターンの二種類。

Abstract Factory => 複雑な生産処理を提供する。オブジェクトの抜けが無いように作成していくこと。最近ではDIというプログラムが解決してくれる。

複雑なコードの時に使用される。

Factory Method => 一回しか利用しないのに、publicに使用する際はかなりめんどくさい。

これを利用することで、publicを隠すことで参照画家の確認。

Builder => 設定を隠蔽できる。が、基本最近では使用されない。

Facade => 機能をまとめるもの。マネージャーに近い。

UIにも使えて、さまざまなことに使用されるのでおぼえておいて損はない。

Composit => 再帰的に使用される。tree構造で使用される。親子関係があった際、その子供にも実装可能に。

Bridge => システムを使用する際に使用。橋渡しと呼ばれているが、実際には複数の実装や機能があり、それぞれに拡張性があるケースをうまく分離するパターン。

Strategy => アルゴリズムのようなものを「切り替える」ことが可能。

Observer => UniRxを使用するときに使う。通知を受け取る。通知を送る。といったことが可能に。

しかし、アニメーションが顕著だが処理が飛び飛びになったり消えたりするので注意すること。(ちなみにその制御はかなり難しい。)

State => マシーン。状態を管理する。グラフィックで使用することが多く、ブループリントのような形に最終的にはなります。(見た目の問題)

これらは「楽になる」と言っているだけで「やれというわけではない」でも会社は求めてるから知っておこうね。

オマケ

Object Pool => あらかじめすべてのオブジェクトをメモリ上に確保しておき、非表示にするなどして、

ゲーム上使用する際にメモリアロケーションを実行しないようにするテクニック。

newとは違い、既に生成されたオブジェクトを、「使える」状態にすることを意味している。また、newではメモリを「最中に」多く使用するが、

このテクニックは、「はじめの地点」で終わっている。

Dirty Flag => データの更新を効率化する、典型的な最適化パターン。

UnityのEditor拡張をやる人はマストで覚える。

「データを変更していて、まだ保存していないオブジェクト」を特定できれば、それを検索して保存処理を効率化できる。

これがDirty Flagを使用する唯一最大の目的。

「SetDirtyし忘れ」というヒューマンエラーが起こる可能性がある。

これをやってしまうと、「絶対に保存されないデータ」が生まれてしまうため注意。