導入
Prototypeは「既存のオブジェクトを複製して新しいものを作る」パターンです。生成コストが高い・設定済みの状態をベースに少し変えたい、といった場面で使います。C#のrecordとwith式がこの考え方を自然に表現します。
図解
flowchart LR
O["原型(設定済み)"] -->|複製 Clone / with| C1["コピー1(一部変更)"]
O -->|複製| C2["コピー2(一部変更)"]
サンプル
// record は with 式で「一部だけ変えた複製」を作れる=Prototypeの実装
var baseConfig = new Config("localhost", 8080, false);
var prodConfig = baseConfig with { Host = "example.com", UseHttps = true };
Console.WriteLine(baseConfig); // Config { Host = localhost, Port = 8080, UseHttps = False }
Console.WriteLine(prodConfig); // Config { Host = example.com, Port = 8080, UseHttps = True }
record Config(string Host, int Port, bool UseHttps);
- Prototypeは「原型を複製して新しいインスタンスを得る」
record+with式で「一部だけ変えたコピー」を安全に作れる- 元のオブジェクトは不変のまま、派生を量産できる
演習
var template = new Character("勇者", 100, 10);
// TODO: with 式で HP だけ 50 に変えた複製 wounded を作り、出力してください
___
- 期待される出力:
Character { Name = 勇者, Hp = 50, Attack = 10 }
ヒント1を見る
var wounded = template with { Hp = 50 };
ヒント2を見る
使用コードの後ろにrecord Character(string Name, int Hp, int Attack);を書きます
まとめ
- Prototypeは既存インスタンスを複製して作る
record+withが自然な実装- 設定済みの状態をベースに派生を作れる
次回: 唯一のインスタンスを保証するSingletonです。