23のデザインパターン(画像の説明)

23のデザインパターン

1、工場

夕食にはMMを追いかけることが欠かせません。マクドナルドの手羽先とKFCの手羽先がMMのお気に入りです。味は違いますが、MMをマクドナルドとKFCのどちらに連れて行っても、ウェイターに「4つの手羽先」と言ってください。マクドナルドとKFCは、手羽先を製造するファクトリーファクトリーモデルです。カスタマークラスとファクトリークラスは分離されています。消費者はいつでも製品を必要としています。工場に聞いてください。消費者は変更なしで新製品を受け入れることができます。欠点は、製品を変更するときに、それに応じてファクトリクラスも変更する必要があることです。例:作成方法とクライアントへの提供方法。


2、ビルダー

MMが聞くのが大好きなのは、「I love you」というフレーズです。さまざまな場所でMMを見るときは、方言でこの文を彼女に話すことができなければなりません。私には多言語翻訳者がいます。上記の各言語があります。ボタン。MMが表示されたら、対応するボタンを押すだけで、対応する言語で「愛してる」と言うことができます。外国のMMでも簡単に対応できます。これが私の「愛してる」です。ビルダー。(これは、イラクで米軍が使用する翻訳者よりも売れ行きが良いはずです)建設モード:製品の内部外観を製品の製造プロセスから分離し、建設プロセスが異なる内部外観の製品オブジェクトを生成するようにします。施工モードでは、商品の外観を独自に変更することができ、お客様は商品の内部構成の詳細を知る必要がありません。構築モードでは、段階的な構築プロセスを実行できます。


3、FactoryMethod

MMにマクドナルドに行ってハンバーガーを食べてもらいます。MMが異なれば味も異なります。覚えておくのは面倒です。通常はファクトリメソッドモードを使用します。MMをウェイターに連れて行き、「ハンバーガーが欲しい」と言います。ハンバーガーのどれが欲しいですか?MMにウェイターに直接伝えるように頼んでください。ファクトリメソッドパターン:コアファクトリクラスはすべての製品の作成を担当しなくなりましたが、特定の作成作業をサブクラスに引き渡してそれを実行し、抽象的なファクトリロールになり、具体的なファクトリクラスが必要とするインターフェイスの提供のみを担当します。インスタンス化する必要のある製品クラスの詳細に触れずに実装します。


4.プロトタイプ

QQを使ってMMとチャットするときは、愛情のこもった言葉を言う必要があります。私はたくさんの愛の言葉を集めました。必要に応じて、それらをコピーしてQQに入れてください。これは私の愛の言葉のプロトタイプです。(100元コピー、よろしいですか)オリジナルモデルモード:プロトタイプオブジェクトを指定して作成するオブジェクトのタイプを指定し、このプロトタイプオブジェクトをコピーする方法を使用して、同じタイプのオブジェクトをさらに作成します。元のモデルモードでは、製品カテゴリを動的に増減できます。製品カテゴリは、事前に決定された階層構造を持つ必要はありません。元のモデルモードは、任意の階層構造に適用できます。欠点は、すべてのクラスにクローンメソッドを装備する必要があることです。


5.シングルトン(シングルトン)

私には6人の美しい妻がいます。彼らの夫はすべて私です。私は私たちの家族の夫シグルトンです。彼らが「夫」と言う限り、彼らはすべて同じ人を指します、そしてそれは私です(私はちょうど夢を見ました。そのような良いこと)シングルトンモード:シングルトンモードは、特定のクラスにインスタンスが1つしかないことを保証し、それ自体をインスタンス化して、このインスタンスのシングルトンモードをシステム全体に提供します。シングルトンモードは、実際の「シングルインスタンス」要件がある場合にのみ使用する必要があります。[b:9ceca65206]構造モデル[/ b:9ceca65206]


6.アダプター

 香港から集まった友人の集まりで美人サラに出くわしましたが、広東語が話せず、北京語も話せないので、友人のケントに助けを求めました。彼はサラとの間のアダプターとしての役割を果たしています。 me。サラはお互いに話すことができます(彼が私をだますかどうかはわかりません)アダプター(トランスフォーマー)モード:クラスのインターフェイスをクライアントが期待する別のインターフェイスに変換します。これにより、元のインターフェイスを一致させることができなくなります。不一致2つのクラスの作業は連携して機能します。適応クラスは、パラメータに従って適切なインスタンスをクライアントに返すことができます。


7、橋(橋)

朝にMMに会うならおはよう、夕方にMMに会うならこんばんは、MMに会って新しい服を着るときは服がとても美しいと言わなければなりません。 MMの新しいヘアスタイルに出会うとき、あなたはあなたのことを言わなければなりません。髪はとても美しいです。「朝にMMに会い、新しいヘアスタイルを作ったとき、何と言うか」という質問はせず、BRIDGEを使って組み合わせるだけです。ブリッジモード:抽象化と実現を切り離して、2つを個別に変更できるようにします。つまり、それらの間の強い関連性が弱い関連性に変わるということです。つまり、ソフトウェアシステムの抽象化と実現の間の継承関係ではなく、組み合わせ/集約関係を使用して、2つを独立して変更できるようにします。


8、コンポジット(コンポジット)

メアリーは今日誕生日を迎えます。「私の誕生日、あなたは私に贈り物をしたいです。」「まあ、大丈夫、店に行って、あなたはそれを自分で選んでください。」「このTシャツはきれいです、それを買ってください、このスカートはよく見えます、それを買ってください、このバッグいいですよ、買ってください。」「ねえ、3つ買った。プレゼントは1つだけ約束した」「なに?Tシャツ、スカート、バッグ、セットに収まるので、お見逃しなく。包んでください。 「...」、MMはコンポジットモードを使用します、あなたはそれをしましたか?合成モード:合成モードは、オブジェクトをツリー構造に編成します。これを使用して、全体と部分の関係を記述することができます。複合モードは、オブジェクトのツリー構造を処理するモードです。複合モードは、ツリー構造内のパーツと全体の関係を表します。複合モードでは、クライアントは個々のコンポーネントオブジェクトをそれらで構成される複合オブジェクトと同じように扱うことができます。


9、デコレータ(デコレーション)

メアリーがサーリーの誕生日になったら、それを受け取るように頼まないでください。そうしないと、彼女は間違いなく今月の食事を終えるでしょう。昨年、フア山の頂上で撮った写真を取り出して、「最高の贈り物、通りのギフトショップで額縁を買って(プレゼントを売っているMMもとても綺麗です)、隣のアートデザイナーのマイクが綺麗な箱をデザインして置いてくれたのを見つけました。で...、私たちは両方ともデコレータです、結局、私は自分自身を手入れしています、それはどうですか、理解しますか?デコレーションモード:デコレーションモードは、オブジェクトの機能をクライアントに対して透過的に拡張します。これは、継承関係の代替であり、継承よりも柔軟性があります。オブジェクトに関数を動的に追加します。これらの関数は動的に元に戻すことができます。いくつかの基本的な関数の順列と組み合わせによって生成される非常に多くの関数を追加します。


10.ファサード(ファサード)

私はプロのニコンカメラを持っていて、自分で絞りとシャッターを手動で調整してプロの写真を撮るのが好きですが、MMはこれを理解しておらず、長い間教えることができません。幸い、カメラにはファサードデザインモードがあります。カメラをオートマチックギアに調整します。ターゲットを狙ってシャッターを押すだけです。すべてがカメラによって自動的に調整されるため、MMもこのカメラで私の写真を撮ることができます。ファサードモード:サブシステムとの外部通信は、統合されたファサードオブジェクトを介して実行する必要があります。ファサードモードは高レベルのインターフェイスを提供し、サブシステムを使いやすくします。各サブシステムにはファサードクラスが1つだけあり、このファサードクラスにはインスタンスが1つしかないため、シングルトンパターンです。ただし、システム全体に複数のファサードクラスを含めることができます。


11.フライ級(フライ級)

毎日MMにテキストメッセージを送っていて、指が疲れています。最近、新しい携帯電話を購入しました。よく使う文章を携帯電話に保存できます。使いたいときは、直接取り出して追加できます。 MMの名前を前面に表示します。単語ごとに入力する必要はありません。共有文はFlyweightであり、MMの名前は抽出された外部特徴であり、コンテキストに応じて使用されます。フライ級モード:フライ級はボクシングの試合でバンタム級を指します。Flyweightモードは、共有された方法で多数のきめの細かいオブジェクトを効率的にサポートします。Flyweightモデルを共有するための鍵は、内因性状態と外因性状態を区別することです。固有の状態はFlyweightに保存され、環境の変化によって変化することはありません。外因性の状態は、環境が変化するにつれて変化します。外因性状態は内因性状態に影響を与えることはできず、それらは互いに独立しています。共有できる状態と共有できない状態を通常のクラスと区別し、共有できない状態をクラスから削除します。クライアントは共有オブジェクトを直接作成することはできませんが、共有オブジェクトの作成を担当するファクトリオブジェクトを使用する必要があります。フライウェイトモードは、メモリ内のオブジェクトの数を大幅に減らします。


12.プロキシ

インターネットでMMとチャットするとき、最初はいつも「こんにちは、こんにちは」、「どこから来ましたか?」「何歳ですか?」「あなたは何歳ですか?」これらの言葉は本当に迷惑です、私のためにプログラムを書いてくださいプロキシ、これらの単語を受け取ったときはいつでも自分の答えを設定し、他の単語を受け取ったときに答えるように私に通知してください。プロキシモード:プロキシモードは特定のオブジェクトのプロキシオブジェクトを提供し、プロキシオブジェクトはソースオブジェクトへの参照を制御します。エージェントとは、他の人または組織に代わって行動する人または組織です。場合によっては、クライアントがオブジェクトを直接参照することを望まないか、直接参照することができず、プロキシオブジェクトがクライアントとターゲットオブジェクトの間の仲介役として直接機能することがあります。クライアントは、プロキシサブジェクトオブジェクトと実際のサブジェクトオブジェクトを区別できません。プロキシモードは実際のプロキシオブジェクトを認識せず、プロキシオブジェクトのインターフェイスのみを保持する場合があります。現時点では、プロキシオブジェクトはプロキシオブジェクトを作成できません。プロキシオブジェクトは、システムの他の役割によって作成および渡される必要があります。[b:9ceca65206]動作モード[/ b:9ceca65206]


13、ChainOfResponsibleity(責任の連鎖モデル)

夕方に英語の授業に行きました。こっそりと最後の列に座りました。前に美しいMMが何人か座っています。メモを見つけて、「こんにちは、あなたは私のガールフレンドになれますか?やりたくない、前に渡してください」と、メモが一枚一枚渡されました。おっと、一列目に渡されたMMが先生にメモを渡しました。彼女はおばあさんだそうです。走れ!チェーンオブ責任モード:Chain of Responsibilityモードでは、多くのオブジェクトが各オブジェクトの参照によって次のホームに接続され、チェーンを形成します。チェーン上のオブジェクトがリクエストの処理を決定するまで、リクエストはこのチェーン上で渡されます。クライアントは、チェーン上のどのオブジェクトが最終的に要求を処理するかを知りません。システムは、クライアントに影響を与えることなく、チェーンを動的に再編成し、責任を割り当てることができます。プロセッサには2つの選択肢があります。責任を取るか、責任を次の人に移します。最終的に、要求はどの受信者オブジェクトでも受け入れることができません。


14、コマンド

私には家がとても厳しくて会えないMMがいるので、彼女は兄を使って私たちの間でメッセージを送る必要がありました。彼女は私に指示があれば兄に私を連れてくるようにメモを書きました。いいえ、兄は別のコマンドを送りました。彼に感謝するために、私は彼に雑麺を一杯食べるように頼みました。彼が言ったことを知りませんでした。「妹の3人のボーイフレンドに同時にコマンドを与えます。お願いします。私は麺を食べます。」、コマンドモード:コマンドモードは、要求または操作をオブジェクトにカプセル化します。コマンドモードは、コマンドを発行する責任とコマンドを実行する責任を分離し、それらを別のオブジェクトに委任します。コマンドモードでは、要求側と送信側を独立させることができるため、要求側は、要求の受信方法や操作の実行の有無はもちろん、受信側のインターフェイスを知る必要がありません。実行され、それがどのように実行されるか。システムはコマンドのキャンセルをサポートしています。


15、通訳(通訳)

洋食の食べ方や映画の見方など、MMを作るためのさまざまな戦略を盛り込んだ「SoakingMMScripture」を持っています。MMとデートするときは、通訳になって上記のスクリプトに従ってください。それ。通訳モード:言語が与えられると、通訳モードはその文法の表現を定義し、同時に通訳を提供することができます。クライアントはこのインタプリタを使用して、この言語の文を解釈できます。インタプリタパターンは、簡単な文法を使用した後、パターンデザインを使用してこれらの文を解釈する方法を説明します。インタプリタモードで言及されている言語は、インタプリタオブジェクトが解釈できる任意の組み合わせを指します。インタプリタモードでは、一連の組み合わせルールである文法を表すコマンドクラスの階層構造を定義する必要があります。各コマンドオブジェクトには、コマンドオブジェクトの解釈を表す説明メソッドがあります。コマンドオブジェクトの階層内のオブジェクトの順列と組み合わせはすべて言語です。


16、イテレータ(イテレータ)

私はメアリーに恋をし、必死に彼女にプロポーズしました。メアリー:「私にあなたと結婚させたいのなら、あなたは私の条件に同意しなければなりません。」私:「私はどんな条件にも同意します、ただそれを言ってください。」メアリー:「私は1カラットのダイヤモンドに恋をしました」私:「買う、買う、もうあるの?」メアリー:「湖のほとりの別荘を見た」私:「買った、買った、もうある?」メアリー:「あのフェラーリを見たスポーツカー」頭がガクガク、椅子に座って歯を食いしばった:「買う、買う、もうある?」...反復サブモード:反復サブモードはクラスター内の要素に順番にアクセスできますクラスターの内部外観を公開せずに。複数のオブジェクトによって形成される集合体は集合体と呼ばれ、集合体オブジェクトはオブジェクトのグループを含むことができるコンテナオブジェクトです。反復サブモードは、反復ロジックを個別のサブオブジェクトにカプセル化します。このサブオブジェクトは、集計自体から分離されています。反復サブモードは、集約されたインターフェイスを簡素化します。各集約オブジェクトは1つ以上の反復サブオブジェクトを持つことができ、各反復子の反復ステータスは互いに独立している可能性があります。反復アルゴリズムは、集約ロールの変更とは無関係にすることができます。


17.調停人(調停)

4人のMMが麻雀をしました。誰がどれだけのお金を払うべきかはっきりしていません。幸い、私はその時にそこにいて、それぞれの交渉チップに従ってお金を数えました。お金を稼いだ人は私からそれを受け取ります。失ったお金も払うだろう私、すべて大丈夫、MMから4回の電話を受けた。メディエーターモード:メディエーターモードは、一連のオブジェクトが相互作用する方法をカプセル化するため、これらのオブジェクトは相互に大幅に相互作用する必要はありません。それらが疎結合できるように。一部のオブジェクトの役割が変更されても、他の一部のオブジェクトの役割にすぐには影響しません。これらの効果が互いに独立して変更できることを確認してください。メディエーターモデルは、多対多の相互作用を1対多の相互作用に変換します。メディエーターパターンは、オブジェクトの動作とコラボレーションを抽象化し、小規模な動作でオブジェクトの相互作用を他のオブジェクトから分離します。


18.メメント(覚書)

複数のMMと同時にチャットするときは、今すぐMMに言ったことを正確に覚えておいてください。そうしないと、MMが不幸になります。幸い、メモがあります。私が言ったことのコピーを持っています。いつでも前のレコードを表示できるように、メモに保存してください。メモモード:メモオブジェクトは、別のオブジェクトの内部状態のスナップショットを保存するために使用されるオブジェクトです。メモモードの目的は、カプセル化を破壊することなくオブジェクトの状態をキャプチャ、外部化、および保存することです。これにより、オブジェクトは将来の適切なタイミングで保存された状態に復元できます。


19.オブザーバー(オブザーバー)

弊社の最新MM情報を知りたいですか?会社のMMインテリジェンスメーリンググループに参加するだけです。トムは情報を収集する責任があります。トムが見つけた新しい情報を1つずつ通知する必要はありません。メールグループに直接公開されます。サブスクライバー(オブザーバー)として、次のことができます。オブザーバーモード:オブザーバーモードは、複数グループの依存関係を定義し、複数のオブザーバーオブジェクトが特定のサブジェクトオブジェクトを同時に監視できるようにします。このサブジェクトオブジェクトの状態が変化すると、すべてのオブザーバーオブジェクトに通知され、自動的に更新されます。


20、州

MMとやり取りするときは、彼女の状態に注意を払う必要があります。彼女の行動は州によって異なります。たとえば、今夜映画に行くように頼むと、あなたに興味のないMMは「何かが起こっている」と言います。 「。あなたを嫌いではないけれど嫌いなMMは「オーケー、でも同僚を連れてきてもいいですか?」と言うでしょう、すでにあなたを好きなMMは「何時?映画を見た後にクラブに行くの?どうやって?」と言うでしょう。 「もちろん、映画を見ながら上手く振る舞えば、MMの状態を嫌いや嫌いから好きに変えることもできます。状態モード:状態モードでは、オブジェクトの内部状態が変化したときに、オブジェクトの動作を変更できます。このオブジェクトは、クラスが変更されたように見えます。状態パターンは、調査対象のオブジェクトの動作をさまざまな状態オブジェクトにパックし、各状態オブジェクトは抽象状態クラスのサブクラスに属します。状態パターンの目的は、内部状態が変化したときにオブジェクトの動作を変更させることです。状態モデルでは、システムのすべての可能な状態に対して、状態クラスのサブクラスを作成する必要があります。システムの状態が変化すると、システムは選択されたサブクラスを変更します。


21、戦略(戦略モード)

さまざまな種類のMMとデートするには、さまざまな戦略を使用する必要があります。映画の中には、より良いもの、軽食を持っているもの、ロマンスのためにビーチに行くものがあります。唯一の目的は、MMの心をつかむことです。私の追求戦略はたくさんあります。 MMキットに含まれています。ストラテジーモード:ストラテジーモードは一連のアルゴリズム用であり、各アルゴリズムを共通のインターフェイスを備えた独立したクラスにカプセル化して、相互に置き換えることができるようにします。ストラテジーモードでは、クライアントに影響を与えることなくアルゴリズムを変更できます。戦略モデルは、行動と環境を分離します。環境クラスは動作クラスの維持とクエリを担当し、さまざまなアルゴリズムが特定の戦略クラスで提供されます。アルゴリズムと環境は独立しているため、アルゴリズムの増減や変更が環境やクライアントに影響を与えることはありません。


22、テンプレートメソッド(テンプレートメソッドモード)


古典的な記事「女の子に寝るように説得する方法」を読んだことがありますか?就寝の不変のステップの認識から、女の子は8つの主要なステップ(テンプレート法)に分けられます:偶然、行き詰まりを打破する、追求する、キスする、前戯、実践、愛撫、そして入る(テンプレート法)、ただし、各ステップは状況によって異なります。アプローチはユーザーによって異なります(特定の実装)。テンプレートメソッドモード:テンプレートメソッドモードは、抽象クラスを準備し、ロジックの一部を具象メソッドと具象コンストラクターの形式で実装してから、いくつかを宣言します。サブクラスを強制する抽象メソッド残りのロジックを実装します。異なるサブクラスは、これらの抽象メソッドを異なる方法で実装できるため、残りのロジックの実装も異なります。最初にトップレベルのロジックフレームワークを開発し、ロジックの詳細を特定のサブクラスに任せて実装します。


23、VISITOR(ビジターモード)

バレンタインデーがやってきました。各MMに花束とカードを贈る必要がありますが、各MMの花は彼女の個人的な特徴に合わせて調整する必要があり、各カードは彼女の個人的な特徴に応じて選択する必要があります。どうすればそれを単独で行うことができますか?明確にするために、花屋とギフトショップのオーナーに訪問者を依頼し、花屋にMMの特性に応じて花の束を選択させ、ギフトショップのオーナーにそれぞれの特性に応じてカードを選択させることをお勧めします。訪問者パターン:訪問者パターンの目的は、特定のデータ構造要素に課せられたいくつかの操作をカプセル化することです。これらの操作を変更する必要がある場合、この操作を受け入れるデータ構造は変更されないままにすることができます。ビジターパターンは、データ構造が比較的不確実なシステムに適しており、データ構造と構造上の操作の間の結合を切断するため、一連の操作を比較的自由に進化させることができます。ビジターパターンを使用すると、新しいビジタークラスを追加するという新しい操作を簡単に追加できます。ビジターパターンは、関連する動作を個々のノードクラスに分散させるのではなく、ビジターオブジェクトに集中させます。ビジターパターンを使用する場合は、サブクラスではなく、ビジタークラスにできるだけ多くのオブジェクトブラウジングロジックを配置します。ビジターパターンは、いくつかの階層構造を横断して、異なる階層構造に属するメンバークラスにアクセスできます。

おすすめ

転載: blog.csdn.net/wangshengfeng1986211/article/details/38366471