Prototype を Go で
Prototype は、 生成に関するデザインパターンの一つで、 特定のクラスに結合することなく、 オブジェクト (たとえ複雑なオブジェクトでも) のクローン作成を可能とします。
プロトタイプのクラス全部には、 共通するインターフェースが必要です。 これにより、 具象クラスが不明であってもオブジェクトを複製することが可能となります。 プロトタイプ・オブジェクトが、 完全なコピーを生成できるのは、 同じクラスのオブジェクト同士が非公開フィールドを互いにアクセスできるからです。
概念的な例
オペレーティング・システムのファイル・システムに基づいた例を使い、 Prototype パターンを調べてみましょう。 OS のファイル・システムは再帰的です: フォルダーにはファイルとフォルダーが含まれており、 そのフォルダーには、 ファイルとフォルダーも含まれている、 といった具合です。
個々のファイルおよびフォルダーは、 inode
インターフェースで表現されます。 inode
インターフェースには、 clone
関数があります。
file
構造体と folder
構造体の両方とも、 inode
型をしているので、 print
関数と clone
関数を実装します。 file
と folder
の両方に clone
関数があることにも注目してください。 両方に含まれる clone
関数は、 それぞれファイルかフォルダーのコピーを返します。 クローン作成にあたり、 「name」 フィールドに、 「_clone」 という接尾語を付け足しています。