23のデザインパターンが数秒で理解できる!ちょっと汚れていますが、本当に秒です…。

01 ファクトリーメソッド

MM を追いかけているなら、夕食を欠かすことはできません。マクドナルドの手羽先と KFC の手羽先はどちらも MM の好物です。味は異なりますが、MM をマクドナルドに連れて行っても KFC に行っても、「手羽先 4 つ」と言いましょう。 」とウェイターに。マクドナルドとKFCは手羽先を生産する工場モデルであり、顧客クラスと工場クラスが分離されている。

消費者は特定の製品を必要とするときはいつでも、工場にそれを要求するだけで済みます。消費者は新製品をそのまま受け入れます。欠点は、製品を変更すると、それに応じてファクトリ クラスも変更する必要があることです。作り方やクライアントへの提供方法など。

02 ビルダーモード

MM が最も聞くのが好きなのは、「愛しています」という言葉です。さまざまな場所で MM に会ったとき、この言葉を彼女の方言で言えなければなりません。私には多言語の翻訳者がいます。上記の各言語には、ボタン。MM を見つけたら、対応するボタンを押すだけで、対応する言語で「I love you」と言うことができます。外国の MM も簡単に修正できます。これは私の「I love you」You ビルダーです。

構築モード: 製品の内部外観を製品の製造プロセスから分離し、構築プロセスで異なる内部外観を持つ製品オブジェクトを生成できるようにします。コンストラクションモードにより製品の内部外観を独自に変更できるため、顧客は製品の内部構成の詳細を知る必要がありません。ビルド パターンは、段階的なビルド プロセスを強制します。

03 抽象工場

MM をマクドナルドに誘い、ハンバーガーを食べます。MM によって味が異なります。それぞれを覚えるのは面倒です。私は通常、ファクトリー メソッド モードを使用します。MM をウェイターに連れていき、「ハンバーガーが食べたい」と言います。バーガーが欲しいなら、MM にウェイターに直接伝えるように頼んでください。

ファクトリ メソッド モード: コア ファクトリ クラスはすべての製品の作成を担当しなくなりましたが、特定の作成作業はサブクラスに引き渡され、抽象ファクトリの役割となり、特定のファクトリ クラスが実装する必要があるインターフェイスを与えることだけを担当します。どの製品クラスをインスタンス化する必要があるかの詳細には触れません。

04 プロトタイプモード

QQ で MM とチャットするときは、愛情のある言葉を言わなければなりません。意地悪な愛の言葉をたくさん集めました。必要なときにコピーして QQ に入れてください。これが私の愛の言葉の原型です。(1個100元、欲しいですか)

オリジナル モデル モード: 作成するオブジェクトのタイプを示すプロトタイプ オブジェクトを指定し、そのプロトタイプ オブジェクトをコピーして同じタイプのオブジェクトをさらに作成します。オリジナルモデルパターンは、商品カテゴリーを動的に増減させることができ、商品カテゴリーにあらかじめ階層構造を持たせる必要がなく、どのような階層構造にも適用可能です。欠点は、すべてのクラスに clone メソッドを装備する必要があることです。

05 シングルステートモード

私には美しい妻が6人います、そして彼らの夫は全員私です。私は家族の夫シグルトンです。彼らが「夫」と言う限り、それらはすべて同じ人を指します、そしてそれが私です(夢を見ました、どうしたらそんな良いことができるんだろう)

シングルトン モード: シングルトン モードでは、特定のクラスのインスタンスが 1 つだけ存在することが保証され、それ自体がインスタンス化されて、このインスタンスがシステム全体に提供されます。Singleton パターンは、実際に「単一インスタンス」が必要な場合にのみ使用してください。

06 アダプターモード

友人のパーティーで、香港から来た美しい女性サラに会いましたが、私は広東語が話せませんし、彼女は北京語が話せないので、友人のケントに頼らなければなりませんでした。彼は私とサラの間のアダプターでした。私とサラサラがお互いに話しましょう(彼が私を演じるかどうかはわかりません)

アダプター (トランスフォーマー) モード: クラスのインターフェースをクライアントが期待する別のインターフェースに変換し、インターフェースの不一致により連携できなかった 2 つのクラスが連携できるようにします。アダプター クラスは、パラメーターに従って適切なインスタンスをクライアントに返すことができます。

07 ブリッジモード

朝MMに会ったら、おはようと言いたい、夕方MMに会ったら、こんばんはと言いたい、新しいドレスを着ているMMに会ったら、あなたの服はとても美しいと言いたい、いつMM の新しいヘアスタイルに出会ったら、あなたのものだと言いたくなります。その髪はとても美しいです。「朝、MMに会って、新しい髪型にしたんだけど、どう思う?」と聞かずに、BRIDGEを使って自分で組み合わせることができます。

ブリッジ モード: 抽象化と実現を切り離し、両者が独立して変更できるようにします。つまり、それらの間の強い関連性を弱い関連性、つまりソフトウェア システムの抽象化と実現化の間で変更します。代わりに合成/集約関係を使用します。継承関係を調整して、2 つを独立して変更できるようにします。

08 合成モード 今日はメアリーの誕生日です。「今日は私の誕生日だから、プレゼントをあげたいのね。」 「そうだね、お店に行って自分で選んでね。」 「このTシャツは美しい、買って、このドレスも美しい、買って、これ」バッグもいいですね、買ってください」 「ねえ、3 枚買ったのに、プレゼントする約束は 1 つだけだよ」 「なんだ、T シャツとスカートとバッグはセットだよ、お嬢さん、お願い」 「…」、MMはコンポジットモードを使用します、理解しましたか?

合成モード: 合成モードではオブジェクトをツリー構造に編成し、全体と部分の関係を記述するために使用できます。複合モードは、オブジェクトのツリー構造を扱うモードです。複合モードは部分と全体の関係をツリー構造で表現します。複合モードを使用すると、クライアントは個々のコンポーネント オブジェクトを、それらで構成される複合オブジェクトと同じように扱うことができます。

09 デコレーションモード

メアリーの誕生日が終わったら、今度はサーリーが誕生日を祝う番だから、彼女に自分で選ばせないでね、そうしないと今月の食費が確実に使われてしまうから、去年華山の頂上で撮った写真を取り出して、そして、裏に「最高の贈り物は、あなたを愛しています、フィタ」と書いて、それから通りのギフトショップにフォトフレームを買いに行き(ギフトを売っているMMもとても美しいです)、マイクに尋ねました。隣でアートデザインに携わっている人は、それを入れるための美しい箱をデザインするために... 私たちは皆、装飾者であり、結局のところ、彼らはすべて私を装飾しています、どうですか、わかりますか?

デコレーション モード: デコレーション モードは、クライアントに対して透過的な方法でオブジェクトの機能を拡張します。これは継承関係の代替であり、継承よりも高い柔軟性を提供します。関数をオブジェクトに動的に追加し、これらの関数を動的に取り消すことができます。いくつかの基本関数の順列と組み合わせから得られる非常に多くの関数を追加します。

10 ファサードモード

私はプロ仕様の Nikon カメラを持っており、プロ仕様の写真を撮るために絞りとシャッターを手動で調整するのが好きですが、MM は長い間教えてきたにもかかわらず、これらのことを理解していません。幸いなことに、このカメラにはファサード デザイン モードがあります。カメラを自動モードに設定すると、ターゲットに向けてシャッターを押すだけです。すべてがカメラによって自動的に調整されるため、MM もこのカメラを使用して次のことを行うことができます。私の写真を撮ってください。ファサード パターン: サブシステムとの外部通信は、統合されたファサード オブジェクトを通じて行う必要があります。

ファサード パターンは、サブシステムを使いやすくする高レベルのインターフェイスを提供します。各サブシステムにはファサード クラスが 1 つだけあり、このファサード クラスにはインスタンスが 1 つだけあります。つまり、シングルトン パターンです。ただし、システム全体に複数のファサード クラスを含めることができます。

11 フライウェイトモード

毎日 MM でテキスト メッセージを送信していますが、指が疲れています。最近新しい携帯電話を購入しました。よく使う文章を携帯電話に保存できるので、一単語ずつ入力する必要はもうありません。共有文は Flyweight、MM の名前は抽出された外部特徴であり、文脈に応じて使用されます。フライ級モード: FLYWEIGHT はボクシングの試合におけるバンタム級を指します。

フライウェイト モードは、共有方法で多数のきめの細かいオブジェクトを効率的にサポートします。Flyweight モードで共有するための鍵は、固有状態と外部状態を区別することです。固有の状態は Flyweight 内に保存され、環境によって変化することはありません。外部状態は環境の変化とともに変化します。外部状態は内部状態に影響を与えることができず、それらは互いに独立しています。

通常のクラスから共有できる状態と共有できない状態を分離し、共有できない状態はクラスから除外する。クライアントは共有オブジェクトを直接作成できませんが、共有オブジェクトの作成を担当するファクトリ オブジェクトを使用する必要があります。フライウェイト モードでは、メモリ内のオブジェクトの数が大幅に削減されます。

12 プロキシモード

インターネット上の MM とのチャットはいつも「こんにちは」から始まります。「どこから来たの?」「何歳ですか?」「身長はどれくらいですか?」これらの言葉は本当に迷惑です。プロキシとしてプログラムを作成し、設定してくださいこれらの言葉を受け取ったらあなた自身の答えを作成し、他の言葉を受け取ったら答えるように通知してください。どうですか、クールです。

プロキシ モード: プロキシ モードはオブジェクトのプロキシ オブジェクトを提供し、プロキシ オブジェクトはソース オブジェクトへの参照を制御します。代理店とは、ある個人または機関が別の個人または機関に代わって行動することです。場合によっては、クライアントがオブジェクトを直接参照したくない、またはオブジェクトを直接参照できない場合、プロキシ オブジェクトはクライアントとターゲット オブジェクトの間で直接仲介の役割を果たすことができます。

クライアントは、プロキシ サブジェクト オブジェクトと実際のサブジェクト オブジェクトを区別できません。プロキシ モードは実際のプロキシ オブジェクトを認識していない可能性がありますが、プロキシ オブジェクトのインターフェイスを保持しているだけです。現時点では、プロキシ オブジェクトはプロキシ オブジェクトを作成できず、プロキシ オブジェクトはシステムの他のロールによって作成されて渡される必要があります。 。

13 責任連鎖モデル

夕方英語の授業に行って、コソコソするために最後列に座ったんですけど、すごい、前に美人のMMが何人も座ってますね、メモを見つけて「こんにちは、私のガールフレンドになってもらえますか? もし「パスフォワードはしたくないよ」とメモが一枚ずつ渡されていきました。おっと、最前列に渡したMMさんが先生にメモを渡しました。ババアだそうですよ、逃げてください!

責任連鎖モード: 責任連鎖モードでは、多くのオブジェクトが接続され、各オブジェクトがその次のホームを参照することによって連鎖を形成します。リクエストは、チェーン上のオブジェクトがリクエストの処理を決定するまで、チェーン上で渡されます。クライアントはチェーン上のどのオブジェクトが最終的にリクエストを処理するのかを知りませんが、システムはクライアントに影響を与えることなくチェーンを動的に再編成し、責任を割り当てることができます。処理者には、責任を受け入れるか、次の当事者に責任を渡すかの 2 つの選択肢があります。リクエストは、受信側オブジェクトによって最終的に受け入れられない可能性があります。

14 コマンドモード

MM の家族がとても厳格で、会うことができないので、彼女の兄弟を使ってメッセージを送らなければなりません。彼女から何か指示があれば、メモを書いて彼女の兄弟に持ってきてもらうだけです。それは私に。いや、弟がまたCOMMANDを送ってきたのでお礼に雑ソース麺をご馳走したのですが、弟は「姉の彼氏3人に同時にCOMMANDを送る、そして君が一番安いよ。招待して」と言いました。麺を食べに来てね。」

コマンド パターン: コマンド パターンは、リクエストまたは操作をオブジェクトにカプセル化します。コマンド パターンは、コマンドを発行する責任とコマンドを実行する責任を分離し、それらを別のオブジェクトに委任します。コマンド モードでは、要求側と送信側を独立させることができるため、要求側は受信側のインターフェイスを知る必要がありません。さらに、要求がどのように受信されるか、操作が実行されるかどうか、いつ実行されるかを知る必要もありません。 、およびそれがどのように実行されるか。システムはコマンドの取り消しをサポートしています。

15 通訳モード

私は「MM 漬けの本」を持っています。これには、洋食を食べる手順や映画に行く方法など、MM のためのさまざまな戦略が含まれています。MM とデートするときは、通訳を作成し、上記のスクリプトに従うだけです。それを実行してください。

インタプリタ モード: 言語を指定すると、インタプリタ モードはその文法の表現を定義し、同時にインタプリタを提供できます。クライアントは、このインタプリタを使用して、この言語の文を解釈できます。インタプリタ パターンは、単純な文法を前提としたスキーマ設計を使用してこれらのステートメントを解釈する方法を記述します。

インタプリタ パターンで言及される言語は、任意のインタプリタ オブジェクトが解釈できる任意の組み合わせを指します。インタプリタモードでは、文法を表すコマンドクラスの階層、つまり一連の組み合わせ規則を定義する必要がある。各コマンド オブジェクトには、コマンド オブジェクトの解釈を表す Explain メソッドがあります。コマンド オブジェクトの階層におけるオブジェクトの順列および組み合わせはすべて言語です。

16 反復モード

私はメアリーに恋をし、必死でプロポーズしました。メアリー:「結婚してほしいなら、私の条件に同意しなければなりません」 私:「どんな条件でも同意します、言ってください」 メアリー:「私はその1カラットのダイヤモンドに恋をしました」 私:「」メアリー:「湖畔のあの別荘に興味があるの」 私:「買います、買います、他にはありますか?」メアリー:「あのフェラーリのスポーツカーに興味があるの」椅子に座った私の頭はざわめき、歯を食いしばって:「買うよ、買うよ、もう何かある?」

反復モード: 反復モードでは、コレクションの内部外観を公開することなく、コレクション内の要素に順次アクセスできます。複数のオブジェクトによって形成される集合体は集合体と呼ばれ、集合体オブジェクトはオブジェクトのグループを含めることができるコンテナ オブジェクトです。反復サブパターンは、反復ロジックを自己完結型のサブオブジェクトにカプセル化するため、集約自体から分離されます。

反復モードでは、集約インターフェイスが簡素化されます。各集約オブジェクトは 1 つ以上の反復子のサブオブジェクトを持つことができ、各反復子の反復ステータスは互いに独立していることができます。反復アルゴリズムは、集約の役割の変更とは無関係にすることができます。

17 メディエーターパターン

MM が 4 人で麻雀をしていて、誰が誰に渡すのかが明確ではありませんでした。幸いなことに私はその時そばにいたので、チップの枚数に応じてお金を計算しました。お金を稼いだ人は私からお金を奪い、お金を失った人も私に支払いました。すべて問題ありません。MM から 4 回電話がありました。Mediator パターン: Mediator パターンは、一連のオブジェクトが相互に対話する方法をラップするため、これらのオブジェクトが相互に明示的に対話する必要がなくなります。したがって、それらを疎結合にすることができます。

一部のオブジェクト間の相互作用が変化しても、他のオブジェクト間の相互作用にはすぐには影響しません。これらの効果は互いに独立して変更できることが保証されています。Mediator パターンは、多対多のインタラクションを 1 対多のインタラクションに変換します。メディエーター パターンは、オブジェクトの動作と連携を抽象化し、オブジェクトの小規模な動作を他のオブジェクトの相互作用から分離します。

18メモモード

複数の MM と同時にチャットするときは、MM に今言ったことを正確に覚えていなければなりません。そうしないと、MM が知ったら不幸になります。幸いなことに、私はメモを持っているので、今私が MM に言ったことをすべてコピーします。メモに記入して保存しておくと、いつでも過去の記録を確認できます。

メメント パターン: メメント オブジェクトは、別のオブジェクトの内部状態のスナップショットを保存するために使用されるオブジェクトです。メモ モードの目的は、オブジェクトの状態をキャプチャし、それを外部化し、カプセル化を破ることなく保存し、将来の適切な時点で保存された状態にオブジェクトを復元できるようにすることです。

19 オブザーバーパターン

当社のMMの最新情報を知りたいですか?会社の MM インテリジェンス電子メール グループに参加するだけです。トムはインテリジェンスを収集する責任があります。彼は発見した新しい情報を 1 つずつ通知する必要はなく、電子メール グループに直接公開します。購読者 (オブザーバー) として、私たちはタイムリーに情報を受け取ることができます。

オブザーバー モード: オブザーバー モードは、マルチチームの依存関係を定義し、複数のオブザーバー オブジェクトが特定の対象オブジェクトを同時に監視できるようにします。このサブジェクト オブジェクトは、状態に変化があったときにすべてのオブザーバー オブジェクトに通知し、オブザーバー オブジェクト自体を自動的に更新できるようにします。

20 ステートモード

MM とデートするときは、彼女の状態に注意を払う必要があります。彼女の行動は状態によって異なります。たとえば、彼女を今夜映画に行こうと誘うと、あなたに興味のない MM はこう言います。あなたのことを嫌いではないが、まだ好きになっていない MM は、「分かったけど、同僚を連れてきてもいいですか?」と言い、すでにあなたのことが好きである MM は、「今何時ですか? クラブに行くのはどうですか?」と言います。もちろん、映画を見ながら良いパフォーマンスをすれば、MMの状態を嫌いや嫌いから好きに変えることもできます。

状態パターン: 状態パターンを使用すると、オブジェクトの内部状態が変化したときにオブジェクトの動作を変更できます。オブジェクトのクラスが変更されたようです。状態パターンは、研究対象のオブジェクトの動作をさまざまな状態オブジェクトにラップします。各状態オブジェクトは、抽象状態クラスのサブクラスに属します。

状態パターンの目的は、オブジェクトの内部状態が変化したときにオブジェクトの動作を変更できるようにすることです。State パターンでは、システムが達成できる可能な状態ごとに State クラスのサブクラスを作成する必要があります。システムの状態が変化すると、システムは選択されたサブクラスを変更します。

21の戦略パターン

デートするとき さまざまなタイプのMM, さまざまな戦略を使用する必要があります. ある人にとっては映画に行く方が良いです, 他の人にとってはスナックを食べる方が良いです, 他の人にとっては, ロマンスのためにビーチに行くのが最善です. MM のキットには多くの戦略があります。戦略モード: 戦略モードでは、各アルゴリズムを一連のアルゴリズムの共通インターフェイスを持つ個別のクラスにカプセル化し、相互に置き換えることができます。

戦略パターンにより、クライアントに影響を与えることなくアルゴリズムを変更できます。ポリシー モデルは、動作を環境から分離します。環境クラスは動作クラスの維持とクエリを担当し、さまざまなアルゴリズムが具象戦略クラスで提供されます。アルゴリズムと環境は独立しているため、アルゴリズムの増減や変更が環境やクライアントに影響を与えることはありません。

22 テンプレートメソッドパターン

「女の子をベッドに行くように説得する方法」という古典的な記事を読んだことがありますか?女の子がベッドに入るまでのステップは、「偶然」「打開」「追撃」「キス」「前戯」「手マン」「愛撫」「入る」の8つのステップに分かれていますが、それぞれのステップは状況に応じて異なります。それを行うかどうかは、適応性 (特定の実装) に依存します。

テンプレート メソッド パターン: テンプレート メソッド パターンは、抽象クラスを準備し、具体的なメソッドと具体的なコンストラクターの形式でロジックの一部を実装してから、サブクラスに残りのロジックを強制的に実装するいくつかの抽象メソッドを宣言します。サブクラスが異なれば、これらの抽象メソッドを異なる方法で実装できるため、残りのロジックの実装も異なります。まずトップレベルの論理フレームワークを策定し、ロジックの詳細は実装する特定のサブクラスに任せます。

23 訪問者のパターン

バレンタインデーがやって来ました。各MMに花束とカードを送りたいのですが、各MMから送られる花は彼女の個人的な特徴に基づいていなければならず、各カードは彼女の個人的な特徴に従って選択する必要があります。どうすればよいですか?はっきり言うと、花屋とギフトショップの店主を訪問者にして、花屋にはMMの特徴に応じて花束を選ばせ、ギフトショップの店主にはそれぞれの人の特徴に応じてカードを選んでもらいます。それはずっと簡単になるでしょう。

ビジター パターン: ビジター パターンの目的は、特定のデータ構造要素に適用されるいくつかの操作をカプセル化することです。これらの操作を変更する必要がある場合、この操作を受け取るデータ構造は変更されないままにすることができます。ビジター パターンは、比較的未決定のデータ構造を持つシステムに適しており、データ構造とその構造に対する操作の間の結合を切り離すため、一連の操作を比較的自由に進化させることができます。ビジター パターンを使用すると、新しいビジター クラスを追加することで、新しい操作を簡単に追加できます。

ビジター パターンは、関連する動作を個々のノード クラスに分散させるのではなく、ビジター オブジェクトに集中させます。Visitor パターンを使用する場合、オブジェクト参照ロジックをサブクラスではなく Visitor クラスにできるだけ多く配置します。訪問者パターンは、複数のクラス階層にまたがって、異なる階層に属するメンバー クラスにアクセスできます。

おすすめ

転載: blog.csdn.net/2301_78588786/article/details/131774452