コンテンツにスキップ

AbstractFactory

関連するオブジェクト群を、具体型に依存せず生成するパターンです。

  • プラットフォームごとのサービス一式を丸ごと差し替えたいとき
  • テスト用製品群を分離したいとき
  • Abstract Factory
  • Concrete Factory
  • Abstract Product

以下のコードは、上で説明した状況を Unity プロジェクトの文脈で単純化した例です。

public interface IPlatformServiceFactory
{
ILoginService CreateLoginService();
IStoreService CreateStoreService();
}
public sealed class MobilePlatformServiceFactory : IPlatformServiceFactory
{
public ILoginService CreateLoginService() => new MobileLoginService();
public IStoreService CreateStoreService() => new MobileStoreService();
}
public sealed class PcPlatformServiceFactory : IPlatformServiceFactory
{
public ILoginService CreateLoginService() => new PcLoginService();
public IStoreService CreateStoreService() => new PcStoreService();
}
  • オブジェクト生成責務が整理され、依存関係の管理がしやすくなります。
  • 環境や状況ごとに生成方針を柔軟に変えられます。
  • 単純な問題に過度な生成抽象化を入れないようにする必要があります。
  • 生成ルールが増えるほど、文書とテストの同期が重要になります。

プラットフォーム別の製品群を同じインターフェースの裏で生成する流れです。

Abstract Factory の流れ