目次
真实应用场景 " >真实应用场景
ホームページ Java &#&チュートリアル 韓信が将軍になる: 代表モード

韓信が将軍になる: 代表モード

Aug 25, 2023 pm 03:55 PM
java

みなさんこんにちは、Lao Tianです。今日からこの公式アカウントで毎週特典をプレゼントします。何をあげたらいいですか?専門的な書籍である必要がありますが、追加機能はそれほど多くありません。参加方法については記事の最後を参照してください。

さて、本題に入りましょう。今日は、デザイン パターンの Delegation パターン について共有します。適切なライフ ストーリーや実際のプロジェクト シナリオを使用してデザイン パターンについて話し、最後にデザイン パターンを一文にまとめます。

ストーリー

文字通りの意味では、「委任」とは委託の取り決め、つまり代表団の派遣を指します。

私たちの技術分野には委任モデルとも呼ばれるモデルがありますが、委任モデルは GOF の 23 のモデルには属しません。ただし、その性質と役割により、誰もが委任モデルを行動モデル。

韓信が将軍になる: 代表モード


楚漢伝説で、劉邦が韓信を将軍にしたとき、以下の多くの人々がとても不満でした。不満の理由は非常に単純で、韓信は多くの軍事プロジェクトを確立しておらず、チーム内での威信もありません。しかし、彼は「私は王の命令に従うだけです。私の命令に従う将軍は10人だけです。」と単刀直入に言いました。

韓信が将軍になる: 代表モード


劉邦は韓信に命令を出し、韓信も将軍の専門性に基づいて対応する命令を出した。 。

委任パターンの定義

委任パターン: 英語の委任パターン。その基本機能は、タスクのスケジュール設定と割り当てを担当することです。タスクの

ここで、委任モードはプロキシ モードと非常によく似ていることに注意してください。委任モードは、特殊な場合には静的プロキシの全権限と見なすことができます。

エージェント モード: プロセスに重点が置かれます。委任モデル: 焦点は結果にあります。

ライフケース

会社では、上司がプロジェクト マネージャーにタスクを割り当てますが、プロジェクト マネージャー自身が仕事を割り当てます。やり方がわからない これらのタスクは作業を行うのではなく、担当するモジュールに応じて対応する開発仲間に引き継がれ、全員がタスク完了の結果をプロジェクトマネージャーに報告し、最後にプロジェクトマネージャーが結果をまとめる上司に。

これは、委任モードの非常に典型的なアプリケーション シナリオです。

画像を使用して次のことを表します:

韓信が将軍になる: 代表モード


##コードの実装

多くの開発同僚がいますが、彼らは統一された属性を持っています。これはコードです:

//开发的同事进行抽象
public interface IEmployee {
    void doing(String command);
}
//下面假设有三哥员工
public class EmployeeA  implements  IEmployee{
    @Override
    public void doing(String command) {
        System.out.println("我是员工A,擅长做数据库设计,现在开始做" + command);
    }
}
public class EmployeeB implements IEmployee {
    @Override
    public void doing(String command) {
        System.out.println("我是员工B,擅长做架构,现在开始做" + command);
    }
}
public class EmployeeC implements IEmployee {
    @Override
    public void doing(String command) {
        System.out.println("我是员工C,擅长做业务,现在开始做" + command);
    }
}
ログイン後にコピー

従業員がいる場合は、プロジェクト マネージャーのリーダーを定義します。

import java.util.HashMap;
import java.util.Map;

public class Leader {

    private Map<String, IEmployee> employeeMap = new HashMap<>();
    //既然是项目经历,那他心里,肯定知道每个开发同事擅长的领域是什么
    public Leader() {
        employeeMap.put("数据库设计", new EmployeeA());
        employeeMap.put("架构设计", new EmployeeB());
        employeeMap.put("业务代码", new EmployeeC());
    }

    //leader接收到老板Boss的任务命令后
    public void doing(String command) {
        //项目经理通过任务命令,找到对应的开发同事,
        // 然后把对应任务明给这位同事,这位同事就可以去干活了
        employeeMap.get(command).doing(command);
    }
}
ログイン後にコピー

開発同僚やプロジェクト マネージャーには、上司も必要です。

public class Boss {
    //Boss也得根据每个项目经理锁负责的领域进行任务分配
    public void command(String command, Leader leader) {
        leader.doing(command);
    }
}
ログイン後にコピー

テストクラス:

public class DelegateDemoTest {
    public static void main(String[] args) {
        new Boss().command("架构设计", new Leader());
    }
}
ログイン後にコピー

実行結果:

我是员工B,擅长做架构,现在开始做架构设计
ログイン後にコピー

このようにして、コードを使用してライフにおける委任モードのケースを実装しました。シンプルですか?

上記の場合、3 つの重要な役割があります:

  • 抽象人物角色IEmployee
  • 具体任务角色:EmployeeA、EmployeeB、EmployeeC
  • 委派这角色:Leader

真实应用场景

在Spring MVC中有个大姐耳熟能详的DispatcherServlet ,下面请看DispatcherServlet 在整个流程中的角色:

protected void doService(HttpServletRequest request, HttpServletResponse response) throws Exception {
    //转发、分派
    doDispatch(request, response);
}
/**
 * Process the actual dispatching to the handler.
 * 处理实际分派给处理程序
 * <p>The handler will be obtained by applying the servlet&#39;s HandlerMappings in order.
 * The HandlerAdapter will be obtained by querying the servlet&#39;s installed HandlerAdapters
 * to find the first that supports the handler class.
 * <p>All HTTP methods are handled by this method. It&#39;s up to HandlerAdapters or handlers
 * themselves to decide which methods are acceptable.
 * @param request current HTTP request
 * @param response current HTTP response
 * @throws Exception in case of any kind of processing failure
 */
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
    ...
}
ログイン後にコピー

这里只能点到为止,因为涉及到很多东西,尤其是HandlerAdapters、HandlerMapping不是一时半会能讲完的。

另外, 在一些框架源码中,比如Spring等,命名以Delegate结尾,比如:BeanDefinitionParserDelegate(根据不同的类型委派不同的逻辑解析BeanDefinition),或者是以Dispacher开头和结尾或开头的,比如:DispacherServlet一般都使用了委派模式。

#委任モデルの長所と短所

  • #利点: タスクの委任により、大規模なタスクを細分化できます。そして、これらのサブタスクの完了を一元管理することでタスクのフォローアップを実現することで、タスクの完了をスピードアップすることができます。
  • デメリット: タスクの複雑さに応じてタスクの委任方法を変更する必要がある タスクが比較的複雑な場合、複数の委任が必要になる可能性があり、混乱が生じやすい。

概要

わかりました。委任モデルについては以上です。もうわかりましたか?

最後に、委任モデルを 1 つの文で要約します。

要件は非常に単純ですが、気にしません

以上が韓信が将軍になる: 代表モードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

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

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

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

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

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

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

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

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。

See all articles