デザインパターンAbstract Factoryパターン、アダプタパターン、実用的なプロジェクトで実装されたプロトタイプモデル

注:会社のソースプロジェクトのためには、機密性、個人のアップロードご参照および研究のためのデモを必要とします。

送信元アドレス:https://gitee.com/Leelinkai/demo

1.プロジェクトの概要

プロジェクト名:商人ファイリングシステム

プロジェクトの説明:満たす企業に様々な製品(マイクロチャネルアリペイCUPなどであるファイリング機能、各製品のサポート事業を作成するには変更クエリ機能。

2、どのようにデザインパターンとプログラミングを行うには 

2.1抽象ファクトリー

まず、私たちは商品説明を読んで、私たちは、マイクロチャネルのサポートは、作成、変更、クエリ、アリペイ共感することがわかります。この時点では、パッケージのようなものをやって考えるかもしれません。しかし、我々はまた、実際のプロジェクトに使用するためのデザインパターンの種類を考える必要があります。私はまた、マークに焦点を当てると、他の言葉、とも伝えた製品、QQや他の製品に参加するのフォローアップがあるでしょう。ここでは、我々は確かにデザインパターンを作成するために探しているので、Abstract Factoryパターンが出現しました。

Abstract Factoryパターンを使用するという決定が、それをカタログするために私たちのインターフェースを設計する方法のためのフレームワーク以来?:まず、私は2つの概念を紹介したい製品ファミリ製品階層を

  • 製品ファミリ:別の製品であり、同じ工場で生産した製品のグループの階層構造を指し、
  • 製品階層:製品の継承構造。

 

マイクロチャネルクエリ、クエリアリペイ、CUPクエリは、図に待つことができ、マイクロチャネルの製品および製品は、クエリの作成、修正するために、マイクロチャネル、およびマイクロチャネルのマ​​イクロチャネルのお問い合わせ、製品階層あるあります。Y軸製品ファミリので、この行は、作成、変更、およびクエリするための機能を提供し、具体的な工場です。X軸はマイクロチャネルで、Alipay及び銀聯をサポートするために、それぞれ、特定の製品です。上記の分析から、我々は予備的なUML図を描くことができます。

 上記のチャートからUML、我々はプログラムの初期設計のための基本的な枠組みということを見ることができます。これは、コードの一部です。

パブリックインターフェースCreateMerchant {
    公共ボイドcreateMch();
}

パブリッククラスAlipayCreateMerchant実装CreateMerchant {

    @Override
    公共ボイドcreateMch(){
        System.out.printlnは( "Alipayの業務が作成されました");
    }
}
 

パブリッククラスUnipayCreateMerchant実装CreateMerchant {

    @Override
    ます。public void createMch(){
        System.out.printlnは( "CUP企業が作成されました");

    }
}

パブリッククラスWeiXinCreateMerchant実装CreateMerchant {

    @Override
    公共ボイドcreateMch(){
        System.out.printlnは( "マイクロチャネルは、商人が作成されました");
    }
}

パブリックインターフェースModifyMerchant {
    公共ボイドmodifyMch();
}

パブリッククラスAlipayModifyMerchant実装ModifyMerchant {

    @Override
    公共ボイドmodifyMch(){
        System.out.printlnは( "Alipayのビジネスが変更されました");
    }
}

パブリッククラスUnipayModifyMerchant実装ModifyMerchant {

    @Override
    公共ボイドmodifyMch(){
        System.out.printlnは( "CUPが商人に変更されました")。

    }
}

パブリッククラスWeiXinModifyMerchant実装ModifyMerchant {

    @Override
    公共ボイドmodifyMch(){
        System.out.printlnは(「マイクロ文字が商人に変更されました」)。

    }
}

パブリックインターフェースFilingFactory {
    公共CreateMerchant createMerchant()。
    公共ModifyMerchant modifyMerchant();
    公共QueryMerchant queryMerchant();
}
 

パブリッククラスAlipayFilingFactory実装FilingFactory {

    @Override
    公共CreateMerchant createMerchant(){
        (新しいAlipayCreateMerchantを返します)。
    }

    @Override
    公共ModifyMerchant modifyMerchant(){
        (新しいAlipayModifyMerchantを返します)。
    }

    @Override
    公共QueryMerchant queryMerchant(){
        (新しいAlipayQueryMerchantを返します)。
    }

}

パブリッククラスUnipayFilingFactory実装FilingFactory {

    @Override
    公共CreateMerchant createMerchant(){
        )(新しいUnipayCreateMerchantを返します。
    }

    @Override
    公共ModifyMerchant modifyMerchant(){
        )(新しいUnipayModifyMerchantを返します。
    }

    @Override
    公共QueryMerchant queryMerchant(){
        )(新しいUnipayQueryMerchantを返します。
    }

}

コードは非常に完全固執しません。しかし、コードの基本的な考え方は、です。あなたがQQ製品の申告を追加したいと仮定し、それだけで工場をすることができFilingFactoryファイリングコンクリートを達成QQFlingFactoryを作成できません。

2.2アダプタモード

背景:システムは、内部システムの外部インターフェイスを提供するために必要とされる要求の上流で機能します。しかし、そのプロジェクトは、プロジェクトに関連する取引のための唯一の責任があるので、計画自体は継承が他のプロジェクトを要求します、この作品をコピーした上流のプロジェクトの進捗状況のプロセスは、商人のファイリングを担当し、その職務を遂行。しかし、原因は証明書の同じ2つのセットを意味し、移行した場合、ファイリングの一貫した貿易証明書と証明書を得ることの難しさは、両側を維持する必要があります。合理的なコード構造設計側を変更しないために、設計パターンを決定アダプターモード。

パブリックインターフェースRequestChannel {
    公共ボイドreqChannelCreate();

    ます。public void reqChannelModify();

    ます。public void reqChannelQuery();
}

パブリッククラスRequestChannelAdapter実装RequestChannel {

    プライベートOtherItemRequestChannel otherItemRequestChannel、他のプロジェクトへの//インターフェースが
    
    @Override
    (公共無効reqChannelCreateを){
        System.out.printlnはは( "これは、ビジネス・ロジック・チャネルの束を作成するための要求である");
        otherItemRequestChannel.reqChannelCreate();
    }
    @Override
    ます。public void reqChannelModify( ){
    }
    @Override
    公共ボイドreqChannelQuery(){
    }

}

パブリッククラスAlipayCreateMerchant実装CreateMerchant {

    @Override
    公共ボイドcreateMch(){
        System.out.printlnは( "Alipayの業務が作成された");
        RequestChannel RequestChannel =新しい新しいRequestChannelAdapter();
        RequestChannel.reqChannelCreate();
    }
}

2.3プロトタイプモデル

インスタンス化するために、プロトタイプモードとMingkeロングコピー・アウトすることで、オブジェクトとしてプロパティを作成することを目指しモード、ではなく、それぞれの時間。JVMのプロトタイプモデルは、オーバーヘッド削減し、パフォーマンスを向上させることができます。

背景:インポートバルクデータテーブル読み出し動作、テーブルの行はすべてのフィールドが対象となるあります。したがって、オブジェクトモデルをカプセル化することができるこれらの理由を使用して。ことに注意してくださいプロトタイプモデルが浅いクローンゴールドと深いクローンに分かれています。ほとんどの人は、ここでは詳しく説明しない、相談し、自分で使用することができます。

商人クラス実装Cloneableを{パブリック
    プライベート文字列名;
    プライベート文字列アドレス、
    パブリック文字列のgetName(){
        戻り名;
    }
    公共ボイドのsetName(文字列名){
        this.name =名;
    }
    パブリック文字列のgetAddress(){
        リターンアドレス;
    }
    公共setAddressボイド(列アドレス){
        this.address =アドレス;
    }
    // 新しいオブジェクトを作成する際に、このクローンが唯一の調整方法、代わりに新しいオブジェクトインスタンス本明細書で提供される(注)Javaメソッド
    パブリックマーチャントクローンを() {
        オブジェクトオブジェクト= NULL;
        試み{
            super.cloneにオブジェクト=();
            戻り(商人)オブジェクト。
        }キャッチ(CloneNotSupportedException電子){
            戻りヌル。
        }
    }
}

これらは、私はこのファイリングシステムと使用設計モデルを検討要因である、デザインパターンの多くの種類があり、私たちは、より良いあなたのプロジェクトに適用するために、蓄積して学ぶために継続する必要があるプロジェクトでは、より多くの標準化にし、保守が容易。

リリース3元の記事 ウォンの賞賛0 ビュー67

おすすめ

転載: blog.csdn.net/taipoucha5799/article/details/105028632