実際の例を挙げると、基本クラスはVehicleであり、具象クラスはTwoWheelerとFourWheelerであるとします。現在、車両のタイプ(TwoWheelerまたはFourWheeler)は、基本クラスの車両によって決定されます。alloc-initメソッドを使用してTwoWheeler/FourWheelerのインスタンスを作成すると、以下のようなスーパー実装を呼び出して、Vehicleクラスで定義された共通プロパティの値を設定し、これらのプロパティの1つは、タイプが実際にタイプかどうかを決定するタイプです。 TwoWheelerまたはFourWheelerです。
if (self = [super initWithDictionary:dict]){
[self setOtherAttributes:dict];
return self;
}
今、私が車のコレクションを手に入れるとき、それらのいくつかはTwoWheelerであり、他はFourWheelerである可能性があります。したがって、このようなTwoWheelerまたはFourWheelerのインスタンスを直接作成することはできません。
Vehicle *v = [[TwoWheeler alloc] initWithDictionary:dict];
基本クラスのインスタンスを作成し、タイプがわかったら、タイプに応じて子クラスのインスタンスを作成して返す方法はありますか?現在の実装では、具象クラスからスーパー実装を呼び出すため、無限ループになります。
どの具象クラスを事前にインスタンス化する必要があるかわからない場合、このシナリオを処理するための完璧な設計は何でしょうか?