Java デザイン パターン - 外観パターン
概要
今日説明する外観パターンは、比較的単純なデザインパターンであり、日常の開発で時々使用するかもしれませんが、それがデザインパターンであるとは思ったこともないかもしれません。この記事で説明する外観モードをできるだけ網羅的に説明するために、いくつかの例から始めます。それがあなたにとって有益であることを願っています。
引用
ここに引用を挿入する目的は、日常の開発で出現パターンを使用するときに思い出してもらうことです。
もしかしたら、あなたの上司があなたのためにこのような仕事を手配してくれるかもしれません。これはコア モジュールである可能性があり、モジュールにはその機能の 1 つが含まれますが、上司は呼び出し用のインターフェイスを提供することだけを望んでいるかもしれません。彼はこう言います: こんにちは、Xiao Ming。現在のシステムにはコア機能 P0 が必要です。それを実装してください。コードの内部ロジックを知る必要はありません。どうぞ。
そのようなタスクを頻繁に割り当てられる場合は、外観モードをマスターしている必要があると思います。
定義
外観パターンは、サブシステム内のインターフェイスのグループにアクセスするための統一インターフェイスを提供します。ファサード パターンは、サブシステムを使いやすくする高レベルのインターフェイスを定義します。
非出現モード
ここでは、「Dahua Design Patterns」という本の例を使用しています。この例は非常に鮮やかだと思います。ここで、あなたが株式投資家であると想像してください (ブロガーが株式取引をしていないだけで、ここに何か問題があるかどうかはわかりません。もしそうであれば、見なかったことにしてください。^_^) 、財務管理活動を行いたいと考えています。あなたは 2 つの株、1 つの国債、1 つの不動産に興味を持っています。
今このコードを書くように頼まれた場合、コード フレームワークは次のクラス図のように見えるかもしれません:
他の財務管理活動のロジックは株式のロジックとは異なるため、ここには株式コードのみがリストされています。 . は一貫しています。冗長コードにはスペースを占有する以上の利点はありません。
StockA.java
public class StockA { private int stockCount = 0; public void sell(int count){ stockCount -= count; System.out.println("卖了" + count + "支 A 股票"); } public void buy(int count){ stockCount += count; System.out.println("买了" + count + "支 A 股票"); } public int getStockCount() { return stockCount; } }
次のコードは財務管理者向けであり、単純な売買ロジックの場合、財務管理者は非常に多くのコード処理を費やす必要があり、これは本当に苦痛です。
Investors.java
public class Investors { public static void main(String[] args) { StockA stockA = new StockA(); StockB stockB = new StockB(); NationalDebt debt = new NationalDebt(); RealEstate estate = new RealEstate(); stockA.buy(100); stockB.buy(200); debt.buy(150); estate.buy(120); stockA.sell(100); stockB.sell(200); debt.sell(150); estate.sell(120); } }
上記はアピアランスモードを使用せずに書かれたコードです。つまり、以下で説明する外観モードを使用すると、コードをより単純かつ明確にすることができます。
外観モード
上記の非外観モードでは、あまりフレンドリーではないコードロジックがいくつか見られます。アピアランス モードは、呼び出し元にとってより透過的なように、より高いレベルのカプセル化に基づくことができます。以下は、変更された外観モードのクラス図です。
FundFacade.java
public class FundFacade { private StockA stockA = null; private StockB stockB = null; private NationalDebt debt = null; private RealEstate estate = null; public FundFacade() { stockA = new StockA(); stockB = new StockB(); debt = new NationalDebt(); estate = new RealEstate(); } public void buyAll(int count) { stockA.buy(count); stockB.buy(count); debt.buy(count); estate.buy(count); } public void sellAll(int count) { stockA.sell(count); stockB.sell(count); debt.sell(count); estate.sell(count); } public void buyStockA(int count) { stockA.buy(count); } public void sellNationalDebt(int count) { debt.sell(count); } }
上記のコードは、外観のコア クラスである FundFacade です。財務管理システムのすべての操作は、このクラスを通じて実装できます。このクラスを通じて、株式、国債、不動産などの財務管理プロジェクトを、処理方法を気にすることなく簡単に操作できるようになります。それはユーザーにとって良いことですよね?
ユーザーの操作を見てみましょう (もちろん、上記のダイアグラム クラスはほとんどの効果を反映しています)。これがユーザーのコード ロジックです:
Investors.java
public class Investors { public static void main(String[] args) { FundFacade facade = new FundFacade(); facade.buyAll(120); facade.buyStockA(50); facade.sellAll(80); } }
ほら、ユーザーは FundFacade に伝えるだけで済みます。何を買うか、何を売るか、いくらで買うか、いくらで売るかというクラスによって目標を達成できます。とても便利です。
銘柄 A のコードを見てください。実際、実質的な変更はありません。これは、アピアランス モードの魅力でもあり、元のサブシステムのコードを変更する必要がなく、必要なことは 1 つだけで、より高いレベルのカプセル化を構築できます。もちろん、ここでは StockA にアクセスするためにいくつかの簡単な変更を加えました。ユーザーに対して透過的である必要があるため、サブシステムをユーザーに対して公開する必要はもうありません。なぜなら、私たちにはすでにプロの外交官、FundFacadeがいるからです。
StockA.java
class StockA { private int stockCount = 0; void sell(int count){ stockCount -= count; System.out.println("卖了" + count + "支 A 股票"); } void buy(int count){ stockCount += count; System.out.println("买了" + count + "支 A 股票"); } int getStockCount() { return stockCount; } }
外観パターンは、簡単に習得して使用できる比較的単純なデザイン パターンです。ここで言いたいのは、外観モードにも一定の制限があるということです。あなたはそれを発見したと思います。
サブシステム上のすべての操作を FundFacade クラスに引き渡すため、FundFacade クラスによる制約を受けます。たとえば、上記の FundFacade クラスは StockB に対する個別の操作を実装していないため、StockB を操作するためのインターフェイスを FundFacade クラスにカプセル化しない限り、StockB のみを操作することはできません。
Appearance Modeの応用
上記の説明では、Appearance Modeの使用方法を知っているだけでなく、Appearance Modeの制限も理解しているため、客観的な観点からAppearance Modeを選択的に使用する必要があります。これは、私の仕事で外観モードを使用する方法の例です。
現在のプロジェクトの上司は、システムに特定のモジュールを実装するように私に依頼しました。これはコアモジュールであるべきだと思います。このモジュールの機能は、フォルダー内のすべてのファイルに機密情報が含まれているかどうかを確認することです。このモジュールには、AC オートマトンのパターン マッチング、圧縮ファイルの完全自動解凍、さまざまな形式のファイル (doc/xls) など、多くの小さなサブモジュールがあります (もちろん、ボスはこれらのサブモジュールが何を行うか気にしません)。 / ppt/zip/eml/rtf/pdf など、ほとんどのファイル形式は基本的にあります)、ログ システムなど。
あなたが完了したい機能が、最初に何をすべきか、次に何をすべきか、次に何をすべきか、次に何をすべきかということを上司に伝えることはできません...
なんてことだ。とても面倒なのでカプセル化してもらえますか? (もちろん、これらは私の単なる頭の活動です。実際、私は上司に設計プロセスの説明を求めていません)
カプセル化後は、このクラスのこのメソッドを呼び出すように上司に指示するだけでOKです。 。このようにして、上司は内部のロジックを気にする必要はありませんが、何か問題が発生した場合は、それはあなたの責任である必要があります。ははは。 。 。
さて、たわごとはこれで終わりです。上の深刻なパターンの詳細な説明であっても、以下のナンセンスな内容であっても、この記事でデザイン パターンを完全に理解し、学習し、合理的に使用できるようになれば幸いです。
上記は Java デザインパターン - 外観パターンの内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) をご覧ください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Spring Bootは、Java開発に革命をもたらす堅牢でスケーラブルな、生産対応のJavaアプリケーションの作成を簡素化します。 スプリングエコシステムに固有の「構成に関する慣習」アプローチは、手動のセットアップを最小化します。
