質問: Unityでコンポーネントって使いますが、これってデザインパターンの「デコレータ」が使われている認識だったのですが、合っているのでしょうか 最近、Unityはコンポーネント指向プログラミングというのを聞いて、デコレータとは全く関係ない別物だった・・・?となっております それともオブジェクト指向の中にコンポーネント指向という概念があるイメージですかね。。。
回答: デコレータを今回初めて調べたレベルなんで間違っていたら申し訳無い。 雰囲気として「似ているがちょっと違う」印象です。 まずUnityのコンポーネント指向とは何ぞや、というとこの記事が分かりやすいです。 「コンポーネント指向」について そもそもUnityはインターフェースをあんまり使いません。 (例外は一部の入力イベント等。もちろん自作スクリプトで使ってはいけない訳でもない) なのでデザインパターン系は「Unityがそういう概念で動いているよ」というよりも「Unityでもそう書くことも出来るよ」というもの、と思えばいいかと思います。 例:【Unity】31種類のデザインパターンの実装サンプル「Design Patterns Written in Unity3D」紹介 - コガネブログ コンポーネント指向はオブジェクト指向から発展したものっぽいです。 (ここもあまり詳しくないので概要のみ) クラス(設計図)から、インスタンス(製品=オブジェクト)を作って何やかやするのがオブジェクト指向。 コンポーネント指向は、1つのクラスから1つのインスタンスを作り出すのではなく、 1〜複数のクラスを持ったインスタンスを作ろう(もしくは作られたインスタンスに更にクラスをくっ付けて多機能化させよう)という概念です。 ざっくりイメージ ■デコレータ 「スポンジケーキ」コンポーネントをベースに「生クリーム」「イチゴ」機能を拡張した「ショートケーキ」クラスを作成。 「ショートケーキ」クラスをインスタンス化して使う。 ■コンポーネント指向(Unity) 「GameObject」に「スポンジケーキ」コンポーネントを追加、「生クリーム」コンポーネントを追加、「イチゴ」コンポーネントを追加。 これを「ショートケーキプレハブ」として保存、インスタンス化して使う。 ※もちろんショートケーキクラスを自作してもいいが、**しなくてもいい**。Unityだとコンポーネントのドラッグ&ドロップで済むので継承だのインターフェースだのを考えながらコーディングする必要が無い=楽チン。なのでコンポーネント指向が採用されていると思われる。