Javaでデザインパターン(A)

Javaのは、一般的に、一般的に3つのカテゴリーに分類することができ、23個のデザインパターンを持っていると考えられています。

:タイプモード(5)を作成するファクトリメソッドモデル抽象モデル法シングルモードの実施形態Builderパターン、プロトタイプモデルを

構造モード(7つのタイプ):アダプタモード、装飾モード、プロキシモード、外観モード、ブリッジモード、合成モード、フライ級

行動パターン(11種類):戦略パターン、テンプレートメソッドパターン、オブザーバーパターンモードを説明するため、反復モード、責任のパターンのチェーン、コマンドモード、メモモード状態モード、ビジターパターン、仲介モデル

まず、工場出荷時のデザインパターン

ファクトリーモードは、モードとファクトリメソッドAbstract Factoryパターンに分かれています

Factory Methodパターンは3種類に分けられます。

  通常の工場出荷時のパターン:インスタンスを作成し、同じクラスのインターフェイスの一部を達成するために、ファクトリクラスを構築すること、です。

  マルチ工場パターン:ファクトリメソッドは、通常モードに比べて改善され、通常モードのファクトリメソッドは、伝送エラー文字列場合、オブジェクトが適切に作成することができず、複数のモードは、それぞれ、オブジェクトを作成する方法の植物工場の方法の複数を提供します。

  静的Factory Methodパターン:メソッドで上記複数のFactory Methodパターンは、静的に設定され、インスタンスを作成する必要はありません、直接呼び出すことができます。

通常のファクトリパターン:

パブリック インターフェースセンダ{
     公共 ボイド送信(); 
}
パブリック クラス MailSenderのは、実装のSender { 
    @Override 
    公共 ボイドセンド(){ 
        System.out.printlnは( "これは、メールの送信者である"と)。
    } 
}
パブリック クラス SmsSenderは実装し、送信者{ 
    @Override 
    公共 ボイドセンド(){ 
        System.out.printlnは(「これはSMSの送信者である」と)。
    } 
}
パブリック クラスFactory1 { 

    公衆送信者の農産物(文字列型){
         場合( "メール" .equals(タイプ)){
             返す 新しい)(MailSenderのを。
        } そう であれば( "SMS" .equals(タイプ)){
             戻り 新しい)(SmsSenderします。
        } { 
            するSystem.out.printlnは( "输入正确的类型请" )。
            リターン ヌル
        } 
    } 


    パブリック 静的 ボイドメイン(文字列[]引数){ 
        Factory1 factory1 = 新しいですFactory1(); 
        送信者のSMS = factory1.produce( "SMS" ); 
        sms.send(); 
        送信者AA = factory1.produce( "AA" )。
        aa.send(); 
    } 

}

 

マルチプラントモード:

ノーマルモードは、伝送エラー文字列、オブジェクトが適切に作成することができず、それぞれ、オブジェクトを作成する方法の植物工場の方法の複数を提供する複数のモードであれば方法工場モード、ノーマルモードのファクトリメソッドに対する改善です。

パブリック クラスFactory2 { 

    公衆送信者produceMail(){
         返す 新しい)(MailSenderのを。
    } 

    パブリックセンダproduceSms(){
         戻り 新しい)(SmsSenderします。
    } 


    パブリック 静的 ボイドメイン(文字列[]引数){ 
        Factory2 factory1 = 新しいFactory2()。
        送信元SMS = factory1.produceSms()。
        sms.send(); 
    } 

}

 

静的Factory Methodパターン:

この方法では、上記複数のFactory Methodパターンを静的に設定されている、あなたがインスタンスを作成する必要はありません、直接呼び出すことができます。

パブリック クラスFactory3 { 

    パブリック 静的センダproduceMail(){
         戻り 新しい)(MailSenderのを、
    } 

    パブリック 静的センダproduceSms(){
         戻り 新しい)(SmsSenderします。
    } 


    パブリック 静的 ボイドメイン(文字列[]引数){ 
        送信元メール = Factory3.produceMail()。
        mail.send(); 
    } 
}

 

第二に、Abstract Factoryパターン

ファクトリメソッドパターンの問題は、したがって、設計の観点から、いくつかの問題があり、展開したい場合は、あなたが閉鎖原則に反し、ファクトリクラスを変更する必要があり、依存ファクトリクラスのクラスを作成し、それを言うことで、そこにありますどのように解決するには?複数のファクトリクラスを作成するために、Abstract Factoryパターンを使用するには、新しい機能を追加する必要があり、一度ので、それを前にコードを変更する必要が新しい直接ファクトリクラスを追加しません。

 

パブリック インターフェースプロバイダ{
     パブリックセンダ農産物()。
}

 

パブリック インターフェースセンダ{
     公共 ボイド送信(); 
}

 

パブリック クラス Smssenderは実装し、送信者{ 
    @Override 
    公共 ボイドセンド(){ 
        System.out.printlnは( "このSMSの送信を" ); 
    } 
}

 

パブリック クラス MailSenderのは、実装のSender { 

    @Override 
    公共 無効送信(){ 
        System.out.printlnは(「このメール送信」)。
    } 
}

 

パブリック クラス SendMailFactoryが実装プロバイダ{ 

    @Override 
    公衆送信者農産物(){
         戻り 新しい)(MailSenderのを、
    } 
}
パブリック クラス SendSmsFactoryが実装プロバイダ{ 

    @Override 
    パブリック(){センダ農産物を
         返す 新しい)(SmsSenderします。
    } 
}
パブリック クラスのテスト{
     公共 静的 ボイドメイン(文字列[]引数){ 
        SendMailFactory sendMailFactory = 新しいSendMailFactory()。
        送信者の送信者 = sendMailFactory.produce()。
        sender.send(); 
    } 
}

 

 

第三に、Builderパターン

クラスモデルを提供しています工場は、単一のクラスモデルを作成することで、ビルダークロックが複合オブジェクトを作成するために、一緒に様々な製品を管理することで、いわゆる複合オブジェクトは、クラスを参照するが、異なる特性を持って、実際には、Builderパターンこれは、Abstract Factoryパターンの前にあり、最終的なテストの組み合わせ得ます。

パブリック インターフェースセンダ{
     公共 ボイド送信(); 
}

 

パブリック クラス Smssenderは実装し、送信者{ 
    @Override 
    公共 ボイドセンド(){ 
        System.out.printlnは( "このSMSの送信を" ); 
    } 
}

 

パブリック クラス MailSenderのは、実装のSender { 

    @Override 
    公共 無効送信(){ 
        System.out.printlnは(「このメール送信」)。
    } 
}

 

パブリック クラスビルダ{
     プライベートリスト<送信者>リスト= 新しい ArrayListを<> (); 

    公共 のボイド produceMailSender(int型のカウント数){
         のためにint型私= 0; iの数<;私は++ ){ 
            list.add(新しいMailSenderの()); 
        } 
    } 

    公共 ボイド produceSmsSender(INTの数){
         ためint型 i = 0; iは数<; iは++ ){ 
            list.add(新しいSmssender())。
        } 
    } 
}

 

パブリック クラスTestBuilder { 

    公共 静的 ボイドメイン(文字列[]引数){ 
        ビルダービルダー = 新しいビルダ()。
        builder.produceMailSender( 5 )。
    } 
}

 

おすすめ

転載: www.cnblogs.com/noperx/p/11367805.html