外観モード:ファサードモードとも呼ばれる:外観ファサードは、サブシステムの一連のインターフェイスの一貫したインターフェイスを提供し、この一連のサブシステムを使いやすくします(クライアントクラスとサブシステムの結合を減らしながら、新しい外観の役割を導入することで元のシステムの複雑さを減らします)。
画像ソース:デザインパターン:再利用可能なオブジェクト指向ソフトウェアの基礎。
成し遂げる
ケースの要件:家を借りる
家を見つけて家を借りたことを経験した学生は、家を見つけることは非常に痛いことであることに気付くことができます。彼らはコミュニティからコミュニティへと走る必要があるだけでなく、家主と交渉する必要があります(2番目)。そこで彼らは賢くなることを学び、もはやお互いにドアツードアと話をしませんが、Lianjiaや私は私の家族を愛しているような不動産業者を直接見つけます。彼らは彼らの手にある程度の住宅供給を持っています。私たちは彼らに委員会を支払う必要があるので、彼らは私たちに代わって家主と交渉することができます。それらのほとんどは非常にプロフェッショナルで、時間とお金を節約しています。現時点では、不動産業者はファサードであり、下院のテナントはサブシステムサブシステムです。
ファサード
外観クラス:どのサブシステムがリクエストを処理する責任があるかを把握し、クライアントのリクエストを適切なサブシステムオブジェクトにプロキシします。
Public Class MediumFacade {private cuiyuanapartment cuiyuan;プライベートxixiapartment xixi;プライベートxihuapartment xihu; public Mediumfacade(){cuiyuan = new cuiyuanapartment( "cuiyuan Community"、900、1); xixi = new xixiapartment( "xixi Garden"、1200、1); xihu = new xihuapartment( "xihu Community"、2600、1); } public void Rentinghouse(2倍の価格){//価格が適切であり、形成する家があります。 cuiyuan.setstatus(0); } else if(price> = xixi.getPrice()&& xixi.getStatus()!= 0){system.out.println( "subscribe" + xixi.getLocation()); xixi.setstatus(0); } else if(price> = xihu.getPrice()&& xihu.getStatus()!= 0){system.out.println( "reservation" + xihu.getlocation()); xihu.setstatus(0); } else {system.out.println( "入札が低すぎる/リストなし..."); }}}サブシステム
サブシステムコレクション:サブシステム機能を実装し、ファサードオブジェクトによって割り当てられたタスクを処理します(サブシステムにファサード情報がないことに注意してください。つまり、ファサードオブジェクトの参照はありません):
/** * @author jifang * @since 16/8/23 10:12 AM。 */public class xihuapartment {private string location;プライベートダブル価格。プライベートINTステータス; public xihuapartment(string location、double price、int status){this.location = location; this.price = price; this.status = status; } public string getLocation(){return location; } public double getPrice(){return price; } public int getStatus(){return status; } public void setStatus(int status){this.status = status; }} class xixiapartment {private string location;プライベートダブル価格。プライベートINTステータス; public xixiapartment(string location、double price、int status){this.location = location; this.price = price; this.status = status; } public string getLocation(){return location; } public double getPrice(){return price; } public int getStatus(){return status; } public void setStatus(int status){this.status = status; }} class cuiyuanapartment {private string location;プライベートダブル価格。プライベートINTステータス; public cuiyuanapartment(string location、double price、int status){this.location = location; this.price = price; this.status = status; } public string getLocation(){return location; } public double getPrice(){return price; } public int getStatus(){return status; } public void setStatus(int status){this.status = status; }}クライアント
このようにして、クライアントは単に不動産業者に連絡して見積もりを提供します。
public class client {@test public void client(){mediumfacade facade = new MediumFacade(); facade.Rentinghouse(800); }}まとめ
オブジェクト指向の開発の経験がある学生は、外観パターンを聞いたことがない場合でも、彼を使用した可能性があります。これは、依存関係の原則とディミットの法則のアイデアを完全に体現しているからです。
使用
まず、設計の初期段階では、クラシックな3層アーキテクチャなど、レイヤー間のファサードを確立するなど、階層レベルを意識的に分離する必要があります。これにより、複雑なサブシステムにシンプルなインターフェイスを提供し、カップリングの程度を大幅に削減できます。
第二に、開発段階では、サブシステムが継続的な再構成によりますます複雑になることがよくあります。ファサードを追加すると、単純なインターフェイスを提供し、モジュール間の依存関係を減らすことができます。
第三に、レガシーシステムを維持する場合、システムは維持と拡張が非常に難しい場合がありますが、非常に重要な機能が含まれているため、新しい要件に依存する必要があります。この時点で、新しいシステム用にファサードを開発し、ラフまたはハイコンプレックスレガシーコードを設計するための比較的明確でシンプルなインターフェイスを提供し、新しいシステムがファサードと対話できるようにし、ファサードはすべての複雑な作業のためにレガシーコードと対話します。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。