1. 創造的なデザインパターン
1. 工場—女の子を追いかけたいなら、マクドナルドのチキンウィングと KFC のチキンウィングはどちらも彼女の好きなものです。彼女をマクドナルドやケンタッキーフライドチキンに連れて行っても、ウェイターに「手羽先4本」と言うだけです。マクドナルドとKFCは手羽先を生産する工場です
工場モデル:顧客クラスと工場クラスが分かれています。消費者は特定の製品を必要とするときはいつでも、工場に要求するだけで済みます。消費者は新製品をそのまま受け入れることができます。欠点は、製品を変更すると、それに応じてファクトリ クラスも変更する必要があることです。どのように作成し、どのようにクライアントに提供するかなど。
2. ビルダー — 女の子が一番聞きたいのは「愛しています」という言葉です。さまざまな場所から来た女の子に、その言葉を方言で言えるようにしてください。私には多言語の通訳がいます。 MM を見たときに、対応するボタンを押すだけで、外国人 MM も簡単に「愛してる」と言うことができます。私の「愛してる」ビルダー。 (これは、イラクの米軍が使用する翻訳機よりも販売しやすいはずです)
構築モード: プロダクトの内部表現をプロダクト生成プロセスから分離し、1 つの構築プロセスが異なる内部表現を持つプロダクト オブジェクトを生成するようにします。この構築モードでは、製品の内部外観を独自に変更することができ、顧客は製品の内部構成の詳細を知る必要がありません。ビルド モードでは、段階的な構築プロセスが強制されます。
3. ファクトリー メソッド - MM をマクドナルドに誘います。MM によって味が異なります。私は通常、ファクトリー メソッド モードを使用して、MM をウェイターに連れて行き、「ハンバーガー食べますか?」と尋ねます。どのようなハンバーガーが食べたいかは、女の子に直接ウェイターに伝えてください。
ファクトリ メソッド パターン: コア ファクトリ クラスはすべての製品の作成を担当しなくなりましたが、特定の作成作業はサブクラスに任せ、抽象ファクトリの役割となり、特定のファクトリ クラスが実装する必要があるインターフェイスを与えることのみを担当します。どの製品クラスをインスタンス化するかについての詳細には触れません。
4. プロトタイプ - QQ で女の子とチャットするときは、愛情のある言葉をいくつか言う必要があります。必要に応じて、それらをコピーして QQ に入れてください。 (コピー100元、欲しいですか)
オリジナルモデルモード: プロトタイプオブジェクトを与えることで作成するオブジェクトのタイプを指定し、プロトタイプオブジェクトをコピーして同じタイプのオブジェクトをさらに作成します。オリジナルのモデル パターンでは、製品カテゴリを動的に追加または削減できます。製品カテゴリは、事前に決定された階層構造を持つ必要はありません。オリジナルのモデル パターンは、どのような階層構造にも適しています。欠点は、すべてのクラスに clone メソッドを装備する必要があることです。
5. シングルトン - 私には 6 人の美しい妻がいます。彼らの夫は全員私です。彼らが「夫」と言う限り、彼らは皆同じ人を指します、それは私です。夢、どうしてそんな良いことが起こるのでしょうか)
シングルトン モード: シングルトン モードでは、特定のクラスのインスタンスが 1 つだけであることが保証され、クラス自体がインスタンス化され、この
インスタンスがシステム全体に提供されます。シングルトン パターンは、真の「単一インスタンス」要件がある場合にのみ使用してください。
2 番目、構造モデル
6. アダプター — 友人のパーティーでサラという名前の美しい女性に会いました。彼女は香港から来ましたが、私は広東語を話すことができず、彼女も北京語を話すことができませんでした。友人のケント。サラと私の間のアダプターを使用すると、私とサラがお互いに会話できるようになります (彼が私にいたずらをするかどうかはわかりません)
アダプター (トランスフォーマー) モード: クラスのインターフェースを、クラスのインターフェースを期待される別のインターフェースに変換します。これにより、インターフェースの不一致が原因で元々連携できなかった 2 つのクラスが連携できるようになります。アダプテーション クラスは、パラメータに基づいて適切なインスタンスをクライアントに返すことができます。
7. ブリッジ—朝女の子に会ったら、おはようと言いましょう、新しいドレスを着ている女の子に会ったら、こんばんは、と言ってください。女の子に会ったら、こんばんはと言いましょう。女の子に会ったら、こんばんはと言ってください。あなたの髪はとても美しいと言いたいです。 「今朝、新しいヘアスタイルのガールフレンドに会ったら何と言いますか?」などの質問はしないで、BRIDGE を使用して自分で組み合わせてください
ブリッジ パターン: 抽象化を実装から切り離して、2 つを独立して変更できるようにします。つまり、それらの間の強い関連を弱い関連に変更すること、つまり、ソフトウェア システムの抽象化と実装の間の継承関係の代わりに組み合わせ/集約関係を使用して、2 つが独立して変更できるようにすることです。
8. 総合 — 今日はメアリーの誕生日です。 「今日は私の誕生日だから、プレゼントをあげたいのね。」 「分かった、お店に行って自分で選んでね。」 「このTシャツもかわいいし、このスカートもかわいいし、これを買ってね。」 「買ってよ。」 「ねえ、3 枚買ったの。プレゼントは 1 つだけだよ。」お嬢さん、包んでください」 「「…」, MMさんはコンポジットモードを使いますが、使いこなせましたか?
複合モード: 複合モードでは、オブジェクトがツリー構造に編成され、全体とその部分の関係を説明するために使用できます。合成パターンは、オブジェクトの木構造を扱うパターンである。合成モードは部分と全体の関係を木構造で表現します。合成モードを使用すると、クライアントは個々のコンポーネント オブジェクトを、それらで構成される複合オブジェクトとして同等に扱うことができます。
9. 装飾者—メアリーが祝った後は、サーリーが彼女の誕生日を祝う番です。彼女に自分で選ばせるのはやめたほうがいいです。そうしないと、今月の食費が間違いなく使われてしまいます。華山の頂上で撮った写真を取り出してください。去年、裏に「最高」と書いて、フィタ、あなたへの愛です。」私は通りのギフトショップに行ってフォトフレームを買いました(ギフトを売っている女の子もとても美しいです)。隣のアートデザイナーであるマイクに、それを入れるための美しい箱をデザインするように頼んだのですが…、私たちは皆デコレーターであり、最終的には私という人間を飾っているのです、どうでしょうか、わかりますか?装飾モード: クライアントに対して透過的な方法でオブジェクトを展開する装飾モードの機能は、関係を継承する代替手段であり、継承よりも柔軟性が高くなります。オブジェクトに関数を動的に追加し、これらの関数を動的に取り消すことができます。いくつかの基本的な機能の並べ替えや組み合わせによって、非常に大量の機能を追加すること。
10. ファサード - 私はプロ仕様の Nikon カメラを持っており、撮影した写真がプロ仕様になるように、自分で絞りとシャッターを手動で調整するのが好きですが、MM はこれを、長い間教えても理解できませんでした。 。幸いなことに、カメラにはファサード デザイン モードがあり、カメラを自動モードに調整すると、ターゲットに照準を合わせてシャッター ボタンを押すだけですべてが自動的に調整されるため、MM はこのカメラを使用して撮影することもできます。私の写真を撮ってください。部 Facal モード: 外部とサブシステム間の通信は、統合されたファサード オブジェクトを通じて実行する必要があります。ファサード パターンは、サブシステムを使いやすくする高レベルのインターフェイスを提供します。各サブシステムにはファサード クラスが 1 つだけあり、このファサード クラスにはインスタンスが 1 つだけあり、これはシングルトン パターンであることを意味します。ただし、システム全体に複数のファサード クラスを含めることができます。
11. FLYWEIGHT — 私は毎日 MM にメールを送信していますが、最近新しい携帯電話を購入しました。必要なときにすぐに取り出せるようになりました。 MM の名前をその前に追加すると、一字一句入力しなくても送信できます。共有文は Flyweight、MM の名前は抽出された外部特徴であり、文脈に応じて使用されます。
フライ級モード: フライ級とは、ボクシングの試合におけるバンタム級を指します。フライウェイト モードは、共有方法で多数のきめの細かいオブジェクトを効率的にサポートします。フライウェイト モデルを共有する鍵は、内部状態と外部状態を区別することです。固有の状態はフライウェイトの内部に保存され、環境が変化しても変化しません。環境の変化とともに外部の状態も変化します。外部状態は内部状態に影響を与えることができず、相互に独立しています。通常のクラスから共有できる状態と共有できない状態を区別し、共有できない状態をクラスから削除します。クライアントは共有オブジェクトを直接作成できませんが、ファクトリ オブジェクトを使用して共有オブジェクトを作成する必要があります。フライウェイト モードでは、メモリ内のオブジェクトの数が大幅に削減されます。
12. プロキシ - オンラインで女の子とチャットするときは、いつも「こんにちは」「どこから来たの?」「何歳ですか?」「身長はどれくらいですか?」という言葉で始まります。プログラムを私のプロキシにして、これらの言葉を受け取ったときに自動応答を設定し、他の言葉を受け取ったときに答えを通知するようにしてはどうでしょうか。
プロキシ モード: プロキシ モードは、特定のオブジェクトにプロキシ オブジェクトを提供し、プロキシ オブジェクトはソース オブジェクトへの参照を制御します。代理店とは、ある個人または機関が別の個人または機関に代わって行動することです。場合によっては、クライアントがオブジェクトを直接参照したくない、またはオブジェクトを直接参照できない場合、プロキシ オブジェクトがクライアントとターゲット オブジェクトの間の仲介者として直接機能することがあります。クライアントは、プロキシ トピック オブジェクトと実際のトピック オブジェクトの違いを見分けることができません。プロキシ モードは実際のプロキシ オブジェクトを認識しませんが、プロキシ オブジェクトのインターフェイスを保持するだけです。現時点では、プロキシ オブジェクトを作成して、システム内の他のロールによって渡される必要があります。
3 つの行動パターン
13. 責任の連鎖—私は夕方に英語のクラスに行き、ただ楽しむために最後列に座っていました。わあ、私の前に数人の美しい女の子が座っていました。 「こんにちは、私の彼女になってもらえませんか?もし嫌なら、前に渡してください。」 おっと、最初の列の女の子が先生にメモを渡しました。
責任の連鎖モデル: 責任の連鎖モデルでは、多くのオブジェクトがその下位ファミリーへの参照によって接続され、連鎖を形成します。リクエストは、チェーン内のオブジェクトがリクエストの処理を決定するまで、チェーンを上流に渡されます。クライアントはチェーン内のどのオブジェクトが最終的にリクエストを処理するかを知りません。システムはクライアントに影響を与えることなくチェーンを動的に再編成し、責任を割り当てることができます。処理者には、責任を受け入れるか、次の当事者に責任を転嫁するかの 2 つの選択肢があります。リクエストは、最終的には受信側オブジェクトによって受け入れられなくなります。
14. 命令—私には家族がとても厳格で、お互いに会うことができないので、彼女は私たち二人の間でメッセージを送信するのに彼女の兄弟に頼らなければなりません。彼女が私に何か指示があるなら、ただ書いてください。彼女の兄にメモを持ってきてもらいます。いや、彼女の兄がお礼にまたCOMMANDを送ってきたので、雑麺をご馳走したのですが、彼はこう言いました。
コマンド モード: コマンド モードは、リクエストまたは操作をオブジェクトにカプセル化します。コマンド パターンは、コマンドを発行する責任とコマンドを実行する責任を分離し、それらを異なるオブジェクトに委任します。コマンド モードでは、要求側が送信側から独立できるため、要求側は、要求を受信する側のインターフェイスを知る必要がなく、ましてや、要求がどのように受信されるか、操作がいつ、どのように行われるかなどを知る必要がありません。が実行されます。システムはコマンドの取り消しをサポートしています。
15. 通訳—私は「本当のナンパの本」を持っています。洋食を食べる手順、映画に行く方法など、女の子をナンパするためのさまざまな戦略が書かれています。女の子とデートするとき、あなたはインタプリタである必要があるのは、上記のスクリプトに従って実行するだけです。
インタプリタ モード: 言語を指定すると、インタプリタ モードはその文法の表現を定義し、同時にインタプリタを提供できます。クライアントは、このインタプリタを使用して、この言語の文を解釈できます。インタプリタ パターンは、単純な文法が与えられた場合に、パターン設計を使用してこれらのステートメントを解釈する方法を記述します。インタプリタ パターンで言及される言語は、任意のインタプリタ オブジェクトが解釈できる任意の組み合わせを指します。インタプリタモードでは、文法を表すコマンドクラスの階層構造、つまり一連の組み合わせ規則を定義する必要がある。各コマンド オブジェクトには、コマンド オブジェクトの解釈を表す解釈メソッドがあります。コマンド オブジェクトの階層におけるオブジェクトのあらゆる順列と組み合わせが言語です。
16. ITERATOR—私はメアリーに恋をして、必死にプロポーズしました。
メアリー:「結婚してほしいなら、私の条件に同意しなければなりません」
私:「どんな条件でも同意します、言ってください」
メアリー:「私はその1カラットのダイヤモンドに惹かれています」
私:「買う、買うよ、他にはある?」
メアリー:「湖畔のあの別荘に興味があるの」
私:「買う、買う」 「もうありますか?」
メアリー:「そのフェラーリのスポーツカーに興味があるの。」
頭がざわめき、椅子に座って歯を食いしばった:「買います、買います、ありますか?」もう?」反復サブパターン: 反復サブパターンを使用すると、コレクションの内部表現を公開することなく、コレクション内の要素に順次アクセスできます。複数のオブジェクトが集まって形成される集合体は、集合体と呼ばれます。集合体オブジェクトは、オブジェクトのグループを含めることができるコンテナー オブジェクトです。反復サブパターンは、コレクション自体とは別に、反復ロジックを別のサブオブジェクトにカプセル化します。反復サブパターンにより、集約用のインターフェイスが簡素化されます。各集約オブジェクトは 1 つ以上の反復子サブオブジェクトを持つことができ、各反復子の反復ステータスは互いに独立していることができます。反復アルゴリズムは、集計の役割とは独立して変更できます。
17. 仲介者 — 4 人の女の子が麻雀をしていましたが、お互いにいくらのお金をあげるべきかわかりませんでした。幸いなことに、私はその時近くにいて、チップの数に応じてお金を計算しました。お金が私から奪ったのに、お金を払えばすべてうまくいきます。4人の女の子の電話番号を手に入れました。
調停パターンこれにより、それらを疎結合にすることができます。一部のオブジェクト間の相互作用が変化しても、他のオブジェクト間の相互作用にはすぐには影響しません。これらの効果が互いに独立して変更できることを確認してください。 Mediator パターンは、多対多のインタラクションを 1 対多のインタラクションに変換します。メディエーター パターンは、オブジェクトの動作とコラボレーションを抽象化し、オブジェクトの小規模な動作を他のオブジェクトとの相互作用とは別に処理します。
18. メモ - 同時に複数の女の子とチャットするときは、あなたがその女の子に言ったことを必ずはっきりと覚えておいてください。そうしないと、女の子がそれを知ったときに不幸になるでしょう。幸いなことに、私は今私が言った言葉についてのメモを持っています。と女の子に言いました。いつでも過去の記録を確認できるように、コピーしてメモに保管しています。
メモ モード: メモ オブジェクトは、別のオブジェクトの内部状態のスナップショットを保存するために使用されるオブジェクトです。メモ パターンの目的は、カプセル化を破壊することなくオブジェクトの状態を取得、外部化、保存し、将来の適切な時点でオブジェクトを保存された状態に復元できるようにすることです。
19. OBSERVER—当社の最新の MM 情報を知りたいですか?トムは会社の MM インテリジェンス電子メール グループに参加するだけで、発見した新しい情報を 1 つずつ私たちに通知する必要がなく、私たちは購読者 (オブザーバー) としてそれを公開できます。情報を時間内に受信します
オブザーバー パターン: オブザーバー パターンは、複数のオブザーバー オブジェクトが特定の対象オブジェクトを同時に監視できるようにするマルチチームの依存関係を定義します。このトピック オブジェクトの状態が変化すると、すべてのオブザーバー オブジェクトに通知され、オブジェクト自体が自動的に更新されるようになります。
20. 状態—女の子とデートするとき、彼女の行動は状態によって異なります。たとえば、あなたが彼女に今夜映画に行くように頼むと、女の子はあなたに興味がありません。あなたのことを好きではないけどまだ好きになっていない女の子は「分かったけど、同僚を連れて行ってもいい?」と言うし、すでにあなたのことを好きになっている女の子は言うでしょう。 「映画は何時に終わりますか?」「またクラブに行くのはどうですか?」 もちろん、映画を見ている間に適切な行動をとれば、MM のステータスを「嫌い」から「好き」に変えることもできます。ステータス モード: ステート モードでは、オブジェクトの内部状態が変化したときにオブジェクトの動作を変更できます。オブジェクトのクラスが変更されたようです。状態パターンは、調査対象のオブジェクトの動作をさまざまな状態オブジェクトにラップします。各状態オブジェクトは、抽象状態クラスのサブクラスに属します。状態パターンの目的は、オブジェクトの内部状態が変化したときにオブジェクトの動作を変更できるようにすることです。状態パターンでは、システムが取得する可能性のある状態ごとに状態クラスのサブクラスを作成する必要があります。システムの状態が変化すると、システムは選択されたサブクラスを変更します。
21. 戦略—さまざまなタイプの女の子とデートするときは、映画に誘うのが良い、スナックを食べに行く、ロマンスのためにビーチに行くなど、さまざまな戦略を使用する必要があります。ファン・シン、女の子を追いかけるための戦略がたくさんあります。
戦略パターン: 戦略パターンは一連のアルゴリズムをターゲットにし、各アルゴリズムを共通のインターフェイスを持つ独立したクラスにカプセル化して、相互に置き換えることができるようにします。戦略パターンにより、クライアントに影響を与えることなくアルゴリズムを変更できます。これにより、動作が環境から分離されます。環境クラスは動作クラスの維持とクエリを担当し、さまざまなアルゴリズムが特定の戦略クラスで提供されます。アルゴリズムと環境は独立しているため、アルゴリズムの追加、削除、変更が環境やクライアントに影響を与えることはありません。
22. テンプレートメソッド——古典的な記事「女の子をベッドに行くように説得する方法」を読んだことがありますか?女の子は、ベッドに入るまでの変わらないステップが、偶然の出会い、アイスブレイク、追いかけ、キス、前戯、手をつなぐ、愛撫、入るという8つのステップ(テンプレート法)に分かれていることに気づきますが、それぞれのステップは人によって異なります。それを行う方法は、適応性 (具体的な実装) によって異なります。
テンプレート メソッド パターン: テンプレート メソッド パターンは、抽象クラスを準備し、具体的なメソッドと具体的なコンストラクターの形式でロジックの一部を実装し、いくつかの抽象メソッドを宣言します。子を強制する クラスは残りのロジックを実装します。サブクラスが異なれば、これらの抽象メソッドを異なる方法で実装できるため、残りのロジックの実装も異なります。最初にトップレベルのロジック フレームワークを開発し、ロジックの詳細は特定のサブクラスに任せます。
23. 訪問者—バレンタインデーがやって来ました。各女の子に花束とカードが渡されるはずですが、各女の子が送る花は彼女の個人的な特徴に基づいている必要があり、各カードも彼女に基づいて選択される必要があります。自分の性格は自分では分からないので、お花屋さんやギフトショップのオーナーさんに来てもらい、その女の子の特徴を踏まえて花束を選んでもらうと良いと思います。ギフト ショップのオーナーが各人の特性に基づいてカードを選択できるようにすることで、非常に簡単になります。
訪問者パターン: 訪問者パターンの目的は、特定のデータ構造要素に適用されるいくつかの操作をカプセル化することです。これらの操作を変更する必要がある場合、この操作を受け入れるデータ構造は変更しないで済みます。ビジター パターンは、比較的未決定のデータ構造を持つシステムに適しています。これにより、データ構造とその構造に作用する操作の間の結合が分離され、一連の操作を比較的自由に進化させることができます。ビジター パターンを使用すると、新しいビジター クラスを追加することで、新しい操作を簡単に追加できます。ビジター パターンは、関連する動作をノード クラスに分散させるのではなく、ビジター オブジェクトに集中させます。 Visitor パターンを使用する場合、オブジェクト参照ロジックをサブクラスではなく Visitor クラスにできるだけ多く配置します。訪問者パターンは、複数のクラス階層にわたる異なる階層に属するメンバー クラスにアクセスできます。
以上がDahua PHP の 23 のデザインパターン、高エネルギー、プロセス全体でおしっこスポットなしの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。