.NETヘルプ Factory Pattern C#(開発者向けの動作方法) Curtis Chau 更新日:7月 28, 2025 Download IronPDF NuGet Download テキストの検索と置換 テキストと画像のスタンプ Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article C#におけるファクトリパターンは、デザインパターンのカテゴリに属する構造的アプローチです。 C#でのファクトリメソッドデザインパターンは、作成されるオブジェクトの正確な生成クラスを指定せずにオブジェクトを作成する問題を解決することを目的としています。 基本的に、ファクトリパターンはオブジェクトの作成を特定のクラス(ファクトリクラスと呼ばれる)に委任することで対処します。 これにより、システムをより柔軟で管理しやすくすることができ、新しいタイプのオブジェクトを導入する際に特に有用です。ファクトリクラスがオブジェクト作成プロセスを管理し、具体的なクラスへの依存を減らします。 C#での生成的デザインパターンであるファクトリメソッドパターンをどのように実装して使用できるかを探ってみましょう。 後ほど、IronPDF PDF生成ライブラリを探っていきます。 基本的なファクトリメソッドパターンの構造 ファクトリメソッドパターンの核心となるアイディアは、オブジェクトを作成するための共通のインターフェースを定義しながら、サブクラスが作成するオブジェクトのタイプを変更できるようにすることです。 このパターンはいくつかの主要なコンポーネントを含みます: 製品インターフェース: ファクトリメソッドによって作成されるオブジェクトの構造を指定します。 具体的な製品クラス: 製品インターフェースを実装します。 生成クラス(抽象クラス生成者): 制約のある生成メソッドを宣言し、製品インターフェースのオブジェクトを返します。 具体的生成者: ファクトリメソッドを修正して具体的な製品のインスタンスを提供します。 例:車両ファクトリ 車やトラックのような異なるタイプの車両があるシナリオを考えてみましょう。 ユーザー入力または構成ファイルに基づいて異なる種類の車両を作成できる車両ファクトリを作成するためにファクトリパターンを使用します。 ステップ 1: 製品インターフェースを定義します public interface IVehicle { // Method to display information about the vehicle void DisplayInfo(); } public interface IVehicle { // Method to display information about the vehicle void DisplayInfo(); } Public Interface IVehicle ' Method to display information about the vehicle Sub DisplayInfo() End Interface $vbLabelText $csharpLabel ステップ 2: 具体的製品を実装します public class Car : IVehicle { // Displays Car specific information public void DisplayInfo() { Console.WriteLine("This is a Car."); } } public class Truck : IVehicle { // Displays Truck specific information public void DisplayInfo() { Console.WriteLine("This is a Truck."); } } public class Car : IVehicle { // Displays Car specific information public void DisplayInfo() { Console.WriteLine("This is a Car."); } } public class Truck : IVehicle { // Displays Truck specific information public void DisplayInfo() { Console.WriteLine("This is a Truck."); } } Public Class Car Implements IVehicle ' Displays Car specific information Public Sub DisplayInfo() Console.WriteLine("This is a Car.") End Sub End Class Public Class Truck Implements IVehicle ' Displays Truck specific information Public Sub DisplayInfo() Console.WriteLine("This is a Truck.") End Sub End Class $vbLabelText $csharpLabel ステップ 3: 抽象生成者クラスを作成します public abstract class VehicleFactory { // Factory Method to create a vehicle instance public abstract IVehicle CreateVehicle(string type); } public abstract class VehicleFactory { // Factory Method to create a vehicle instance public abstract IVehicle CreateVehicle(string type); } Public MustInherit Class VehicleFactory ' Factory Method to create a vehicle instance Public MustOverride Function CreateVehicle(ByVal type As String) As IVehicle End Class $vbLabelText $csharpLabel ステップ 4: 具体的生成者を実装します public class ConcreteVehicleFactory : VehicleFactory { public override IVehicle CreateVehicle(string type) { // Create vehicle based on type switch (type.ToLower()) { case "car": return new Car(); case "truck": return new Truck(); default: throw new ArgumentException("Invalid vehicle type"); } } } public class ConcreteVehicleFactory : VehicleFactory { public override IVehicle CreateVehicle(string type) { // Create vehicle based on type switch (type.ToLower()) { case "car": return new Car(); case "truck": return new Truck(); default: throw new ArgumentException("Invalid vehicle type"); } } } Public Class ConcreteVehicleFactory Inherits VehicleFactory Public Overrides Function CreateVehicle(ByVal type As String) As IVehicle ' Create vehicle based on type Select Case type.ToLower() Case "car" Return New Car() Case "truck" Return New Truck() Case Else Throw New ArgumentException("Invalid vehicle type") End Select End Function End Class $vbLabelText $csharpLabel ステップ 5: クライアントコードの使用 class Program { static void Main(string[] args) { // Create factory instance VehicleFactory factory = new ConcreteVehicleFactory(); // Create a Car and display its info IVehicle car = factory.CreateVehicle("car"); car.DisplayInfo(); // Create a Truck and display its info IVehicle truck = factory.CreateVehicle("truck"); truck.DisplayInfo(); } } class Program { static void Main(string[] args) { // Create factory instance VehicleFactory factory = new ConcreteVehicleFactory(); // Create a Car and display its info IVehicle car = factory.CreateVehicle("car"); car.DisplayInfo(); // Create a Truck and display its info IVehicle truck = factory.CreateVehicle("truck"); truck.DisplayInfo(); } } Friend Class Program Shared Sub Main(ByVal args() As String) ' Create factory instance Dim factory As VehicleFactory = New ConcreteVehicleFactory() ' Create a Car and display its info Dim car As IVehicle = factory.CreateVehicle("car") car.DisplayInfo() ' Create a Truck and display its info Dim truck As IVehicle = factory.CreateVehicle("truck") truck.DisplayInfo() End Sub End Class $vbLabelText $csharpLabel 上記の例では、VehicleFactoryクラスが抽象生成者として機能し、ConcreteVehicleFactoryクラスがファクトリメソッドCreateVehicleを実装する具体的な生成者です。 このメソッドは、受け取った入力に基づいて作成する車両の種類を決定します。 クライアントコードは、オブジェクト作成ロジックとクライアントコードの間のカップリングを緩くし、異なる車両インスタンスを作成するためにファクトリを使用します。 ファクトリパターンを使用する利点 ファクトリパターンは特に複雑なシステムで様々な利点を提供します: 緩やかな結合: クライアントコードは具体的な製品クラスではなく、インターフェースまたは抽象クラスと対話します。 これにより、デザインがより柔軟で変更が容易になります。 再利用可能なオブジェクト指向ソフトウェア: ファクトリパターンは、オブジェクト作成ロジックをシステムから切り離すことにより、コードの再利用を促進し、システムのメンテナンスや拡張を容易にします。 オブジェクト作成の柔軟性: ファクトリメソッドは異なる実装を許可し、必要なオブジェクトのタイプは外部の要因に基づいてランタイムで選択できます。特に、外部要因によって必要なオブジェクトのタイプが異なるシナリオで便利です。 IronPDF: .NET PDFソリューション IronPDFは.NETプラットフォーム用に設計されたライブラリで、開発者がHTML、CSS、画像、JavaScriptから直接PDFファイルを簡単に作成、編集、および操作できるようにします。複雑なPDF生成APIに深く関与せずにウェブコンテンツをPDF文書に迅速かつ高精度に変換する能力がその主な魅力です。これはChromeベースのレンダリングエンジンを使用しているおかげです。 主な機能には、HTML文字列またはURLからのPDFの生成、ウェブページの動的なPDFへのレンダリング、フォームアプリケーション、サーバーアプリケーション、そして安全なイントラネットなどとの連携があります。 そのパフォーマンスは効率のために最適化されており、非同期操作、カスタムロギング、および迅速に開始するための豊富なドキュメンテーションを提供しています。 IronPDFはHTMLからPDFへの変換において優れており、原本のレイアウトやスタイルの正確な保持を確保しています。 レポート、請求書、およびドキュメントのようなWebベースのコンテンツからのPDF作成に最適です。 HTMLファイル、URL、および生のHTML文字列をサポートし、IronPDFは簡単に高品質のPDFドキュメントを生成します。 using IronPdf; class Program { static void Main(string[] args) { // Initialize a Pdf Renderer with a Chrome Rendering Engine var renderer = new ChromePdfRenderer(); // 1. Convert HTML String to PDF var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"; var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent); pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf"); // 2. Convert HTML File to PDF var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath); pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf"); // 3. Convert URL to PDF var url = "http://ironpdf.com"; // Specify the URL var pdfFromUrl = renderer.RenderUrlAsPdf(url); pdfFromUrl.SaveAs("URLToPDF.pdf"); } } using IronPdf; class Program { static void Main(string[] args) { // Initialize a Pdf Renderer with a Chrome Rendering Engine var renderer = new ChromePdfRenderer(); // 1. Convert HTML String to PDF var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"; var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent); pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf"); // 2. Convert HTML File to PDF var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath); pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf"); // 3. Convert URL to PDF var url = "http://ironpdf.com"; // Specify the URL var pdfFromUrl = renderer.RenderUrlAsPdf(url); pdfFromUrl.SaveAs("URLToPDF.pdf"); } } Imports IronPdf Friend Class Program Shared Sub Main(ByVal args() As String) ' Initialize a Pdf Renderer with a Chrome Rendering Engine Dim renderer = New ChromePdfRenderer() ' 1. Convert HTML String to PDF Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>" Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent) pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf") ' 2. Convert HTML File to PDF Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath) pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf") ' 3. Convert URL to PDF Dim url = "http://ironpdf.com" ' Specify the URL Dim pdfFromUrl = renderer.RenderUrlAsPdf(url) pdfFromUrl.SaveAs("URLToPDF.pdf") End Sub End Class $vbLabelText $csharpLabel コード例 IronPDFをファクトリパターンと統合する方法を示すために、簡単な例を作成してみましょう。 ファクトリパターンは、スーパークラス内で具体的なプロダクトやオブジェクトを作成する方法を提供するタイプの生成的デザインパターンであり、サブクラスが生産される特定のオブジェクトを修正することを許可します。 これは、特定のニーズに基づいてHTML文字列、URL、ファイルから異なるタイプのPDFドキュメントを作成することに適しています。 IPdfCreatorというインターフェースを作成し、PDFを作成するためのメソッドを定義し、その後IronPDFを使用してさまざまな方法でPDFを作成する異なるファクトリークラスを実装します。 ステップ 1: IPdfCreator インターフェースの定義 このインターフェースは、全ての具体的なファクトリーが実装する必要のあるCreatePdfメソッドを宣言します。 public interface IPdfCreator { // Method responsible for creating a PDF void CreatePdf(string source); } public interface IPdfCreator { // Method responsible for creating a PDF void CreatePdf(string source); } Public Interface IPdfCreator ' Method responsible for creating a PDF Sub CreatePdf(ByVal source As String) End Interface $vbLabelText $csharpLabel ステップ 2: 具体的なファクトリーの実装 ここでは、2つの具体的なIPdfCreatorの実装を定義します:1つはHTML文字列からPDFを作成し、もう1つはURLから作成します。 public class HtmlStringPdfCreator : IPdfCreator { // Creates a PDF from an HTML string public void CreatePdf(string htmlString) { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlString); pdf.SaveAs("HtmlStringPdf.pdf"); } } // Create PDF from a given URL public class UrlPdfCreator : IPdfCreator { public void CreatePdf(string url) { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf(url); pdf.SaveAs("UrlPdf.pdf"); } } public class HtmlStringPdfCreator : IPdfCreator { // Creates a PDF from an HTML string public void CreatePdf(string htmlString) { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlString); pdf.SaveAs("HtmlStringPdf.pdf"); } } // Create PDF from a given URL public class UrlPdfCreator : IPdfCreator { public void CreatePdf(string url) { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf(url); pdf.SaveAs("UrlPdf.pdf"); } } Public Class HtmlStringPdfCreator Implements IPdfCreator ' Creates a PDF from an HTML string Public Sub CreatePdf(ByVal htmlString As String) Dim renderer = New ChromePdfRenderer() Dim pdf = renderer.RenderHtmlAsPdf(htmlString) pdf.SaveAs("HtmlStringPdf.pdf") End Sub End Class ' Create PDF from a given URL Public Class UrlPdfCreator Implements IPdfCreator Public Sub CreatePdf(ByVal url As String) Dim renderer = New ChromePdfRenderer() Dim pdf = renderer.RenderUrlAsPdf(url) pdf.SaveAs("UrlPdf.pdf") End Sub End Class $vbLabelText $csharpLabel ステップ 3: ファクトリーの使用 アプリケーションでは、これらのファクトリーを使用して異なるソースからPDFドキュメントを作成し、PDF作成プロセスの詳細を気にせずに済みます。 class Program { static void Main(string[] args) { // Add your IronPDF license key License.LicenseKey = "License-Key"; // Create PDF from HTML string IPdfCreator htmlPdfCreator = new HtmlStringPdfCreator(); htmlPdfCreator.CreatePdf("<h1>Hello, World!</h1>"); // Create PDF from URL IPdfCreator urlPdfCreator = new UrlPdfCreator(); urlPdfCreator.CreatePdf("http://example.com"); } } class Program { static void Main(string[] args) { // Add your IronPDF license key License.LicenseKey = "License-Key"; // Create PDF from HTML string IPdfCreator htmlPdfCreator = new HtmlStringPdfCreator(); htmlPdfCreator.CreatePdf("<h1>Hello, World!</h1>"); // Create PDF from URL IPdfCreator urlPdfCreator = new UrlPdfCreator(); urlPdfCreator.CreatePdf("http://example.com"); } } Friend Class Program Shared Sub Main(ByVal args() As String) ' Add your IronPDF license key License.LicenseKey = "License-Key" ' Create PDF from HTML string Dim htmlPdfCreator As IPdfCreator = New HtmlStringPdfCreator() htmlPdfCreator.CreatePdf("<h1>Hello, World!</h1>") ' Create PDF from URL Dim urlPdfCreator As IPdfCreator = New UrlPdfCreator() urlPdfCreator.CreatePdf("http://example.com") End Sub End Class $vbLabelText $csharpLabel このセットアップでは、HtmlStringPdfCreatorとUrlPdfCreatorはPDFを作成する具体的なファクトリーです。 Programクラスはクライアントとして機能し、HTML文字列やURLからPDFを生成する詳細を知る必要なく、これらのファクトリーを使用します。 このアプローチは要有性を提供し、ファイルやストリームなどからの新しいPDF作成方法を導入することが可能で、IPdfCreatorインターフェースを実装するファクトリーを追加することで、オープン/クローズドの原則を守ります。 出力 以下のスクリーンショットはコードの出力です: 結論 C#のファクトリパターンは、オブジェクト作成を管理し、ソフトウェアデザインをよりメンテナンス可能で拡張可能にするためのフレームワークを提供します。 具体クラスを使用して抽象ファクトリを実装し、作成ロジックを委任することで、開発者は変更しやすく拡張しやすいシステムを作成することができます。 少数のクラスを扱う場合でも、複雑な依存関係のあるシステムの場合でも、ファクトリパターンは具体的なクラスオブジェクトの作成に対する構造化アプローチを提供します。 特に、ユーザー入力、構成、またはアプリケーションの状態に基づいて作成されるオブジェクトのタイプが異なる場合に便利です。 IronPDFは、IronPDFの無料トライアルを提供し、ライセンスオプションはliteLicenseから始まり、PDF機能を.NETアプリケーションに統合したい開発者向けに提供しています。 よくある質問 C#開発においてファクトリーパターンはどのように適用できますか? ファクトリーパターンは、オブジェクトのインスタンス化を管理するファクトリクラスを作成することでC#開発に適用できます。このアプローチにより、オブジェクトの作成インターフェースを定義しつつ、サブクラスが作成されるオブジェクトのタイプを変更できるため、結合度を低くしシステムの柔軟性を促進します。 ソフトウェアデザインにおいてファクトリーパターンはどのような役割を果たしますか? ファクトリーパターンは、オブジェクトのインスタンス化をファクトリクラスに委ねる方法を提供することで、ソフトウェアデザインにおける重要な役割を果たします。これにより、作成ロジックとビジネスロジックを分離し、システムをより管理しやすく、拡張しやすくします。 C#でPDFドキュメントを作成するために開発者はIronPDFをどのように使用できますか? 開発者はChromeベースのレンダリングエンジンを活用してC#でPDFドキュメントを作成するためにIronPDFを使用できます。RenderHtmlAsPdfまたはRenderUrlAsPdfのようなメソッドを使用することで、HTML文字列やウェブページを高品質のPDFドキュメントに簡単に変換できます。 .NET PDFライブラリであるIronPDFを使用する利点は何ですか? .NET PDFライブラリであるIronPDFを使用することにより、HTML、CSS、画像、JavaScriptのようなさまざまな入力からPDFを作成、編集、操作することができるなど、数多くの利点があります。非同期操作をサポートしており、PDF内のウェブコンテンツのオリジナルのレイアウトとスタイルを維持するのに役立ちます。 ファクトリーパターンによってPDFドキュメントの生成はどのように向上しますか? ファクトリーパターンによって、さまざまなソース(HTML文字列、URL、ファイルなど)から共通のインターフェースを介してPDFを作成することが可能になります。これにより、既存のコードを変更することなく、新しいPDFタイプを追加することができ、オープン/クローズド原則に従っています。 ファクトリーパターンはどのようなシナリオで最も役立ちますか? ファクトリーパターンは、ユーザー入力や設定に基づいて動的にオブジェクトの作成を処理する必要があるシステムで最も役立ちます。特に、オブジェクトの作成プロセスに頻繁な変更や拡張が必要なアプリケーションで有益です。 ソフトウェアの柔軟性を維持するためにファクトリーパターンの重要性はどこにありますか? ソフトウェアの柔軟性を維持するためにファクトリーパターンの重要性は、ビジネスロジックからオブジェクトの作成を分離する能力にあります。これにより、既存のコードを変更することなく新しいオブジェクトタイプを導入でき、柔軟で拡張可能なアーキテクチャを維持します。 IronPDFはPDF作成時にファクトリーパターンをどのようにサポートしますか? IronPDFはそのインターフェースとメソッドを通じてパターンを実装することにより、PDF作成時のファクトリーパターンをサポートします。例えば、異なる入力タイプでChromePdfRendererを使用して、開発者は異なるPDFドキュメント形式を作成し、基盤となる作成ロジックを変更することなしに仕様できます。 Curtis Chau 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む 更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む 更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む C# Replace Character In String(開発者向けの動作方法)C# Round to 2 Decimal Places(開...
更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む
更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む
更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む