#ファクトリ メソッド パターン
ファクトリ メソッド パターンは 3 つのタイプに分かれています:1通常のファクトリ モードでは、ファクトリ クラスを確立して、同じインターフェイスを実装するいくつかのクラスのインスタンスを作成します。まず、関係図を見てください: 例は次のとおりです: (電子メールとテキスト メッセージを送信する例を示します)まず、2 つの間の共通インターフェイスを作成します:public interface Sender { public void Send(); }
public class MailSender implements Sender { @Override public void Send() { System.out.println("this is mailsender!"); } }
public class SmsSender implements Sender { @Override public void Send() { System.out.println("this is sms sender!"); } }
public class SendFactory { public Sender produce(String type) { if ("mail".equals(type)) { return new MailSender(); } else if ("sms".equals(type)) { return new SmsSender(); } else { System.out.println("请输入正确的类型!"); return null; } } }
public class FactoryTest { public static void main(String[] args) { SendFactory factory = new SendFactory(); Sender sender = factory.produce("sms"); sender.Send(); } }
this is sms sender!
public class SendFactory { public Sender produceMail(){ return new MailSender(); } public Sender produceSms(){ return new SmsSender(); } }
public class FactoryTest { public static void main(String[] args) { SendFactory factory = new SendFactory(); Sender sender = factory.produceMail(); sender.Send(); } }
テスト クラスは次のとおりです:
this is mailsender!
出力:
public class SendFactory { public static Sender produceMail(){ return new MailSender(); } public static Sender produceSms(){ return new SmsSender(); } }
3. 静的ファクトリ メソッド モード. 上記の複数のファクトリ メソッド モードのメソッドを静的にします。インスタンスを作成する必要はなく、直接呼び出すだけです。
public class FactoryTest { public static void main(String[] args) { Sender sender = SendFactory.produceMail(); sender.Send(); } }
this is mailsender!
出力:
public interface Sender { public void Send(); }
一般的に言えば、ファクトリ パターンが適しています。作成する必要のある製品が多数あり、共通のインターフェイスを持つ場合は常に、それらの製品はファクトリメソッドパターン。上記 3 つのモードのうち、1 つ目のモードは入力文字列が間違っているとオブジェクトを正しく作成できませんが、3 つ目のモードは 2 つ目のモードに比べてファクトリ クラスをインスタンス化する必要がないため、ほとんどの場合は 3 つ目のモードを選択します。 - 静的なファクトリ メソッド パターン。
4. 抽象ファクトリ パターン
ファクトリ メソッド パターンに関する 1 つの問題は、クラスの作成がファクトリ クラスに依存していることです。ファクトリ クラスを変更する必要があります。変更を行うことはクロージャ原則に違反します。したがって、設計の観点から見ると、特定の問題があります。それらを解決するにはどうすればよいですか?抽象ファクトリ パターンを使用して複数のファクトリ クラスを作成するだけで、新しい関数を追加する必要がある場合は、前のコードを変更せずに新しいファクトリ クラスを直接追加できます。抽象的なファクトリーは理解するのが難しいため、最初に図を見てからコードを見ると理解しやすくなります。
例を参照してください:
public class MailSender implements Sender { @Override public void Send() { System.out.println("this is mailsender!"); } }
2 つの実装クラス:
public class SmsSender implements Sender { @Override public void Send() { System.out.println("this is sms sender!"); } }
public class SendMailFactory implements Provider { @Override public Sender produce(){ return new MailSender(); } }
2 つのファクトリ クラス:
public class SendSmsFactory implements Provider{ @Override public Sender produce() { return new SmsSender(); } }
public interface Provider { public Sender produce(); }
インターフェイスの提供:
public class Test { public static void main(String[] args) { Provider provider = new SendMailFactory(); Sender sender = provider.produce(); sender.Send(); } }
Test クラス:
rrreee実際、このモデルの利点は、リアルタイム情報を送信する機能を追加する場合、実装クラスを作成し、Sender インターフェイスを実装するだけで済むことです。ファクトリクラスも同時に作成しますので、Providerインターフェースを実装するだけでOKで、既存のコードを変更する必要はありません。このようにして、拡張性が向上します。
php 中国語 Web サイト、無料の
Java 入門チュートリアル以上がJavaのファクトリーパターンとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。