「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 指示

指示

2024 年 11 月 4 日に公開
ブラウズ:605

コマンド パターンは動作パターンの 1 つで、リクエストが command としてオブジェクト内にラップされ、そのオブジェクトが呼び出し元に渡され、呼び出し元はこのコマンドを処理できる適切なオブジェクトを探します。そしてコマンドを対応するオブジェクトに渡すと、そのオブジェクトがコマンドを実行します。

これも OCP の堅固な原則に従います

株式市場の例を考えてみましょう。株式は売買されるリクエスト (コマンド) であり、この株式は注文の下にラップされ、この注文はブローカー (実行者) に送信されます。 )、ブローカーは注文を分析してこれが買い注文か売り注文かを決定し、最終的に買い注文または売り注文が実行されます(コマンド/リクエストの実行)

command

在庫(リクエスト)

public class Stock {
    private String name ;
    private int quantity;
    public Stock(String n, int q){
        this.name = n;
        this.quantity = q;
    }
    public void sell(){
        System.out.println("[Sell order of quantity "  quantity  " for stock " name  " has been performed]");
    }
    public void buy(){
        System.out.println("[Buy order of quantity "  quantity  " for stock " name  " has been performed]");
    }
}

オーダー (コマンドとしてオブジェクト内にラップされたリクエスト)

public interface Order {
    public void execute();
}

具体的な注文

public class BuyOrder implements Order {
    private Stock stock;
    public BuyOrder(Stock s){
        this.stock = s;
    }
    @Override
    public void execute(){
        stock.buy();
    }
}

public class SellOrder implements Order {
    private Stock stock;
    public SellOrder(Stock s){
        this.stock = s;
    }
    @Override
    public void execute(){
        stock.sell();
    }
}

ブローカー(コマンド/オーダーを処理できる適切なオブジェクトを選択する呼び出し者)

import java.util.ArrayList;
import java.util.List;

public class Broker {
    List orders;
    public Broker(){
        orders = new ArrayList();
    }

    public void addOrder(Order e){
        orders.add(e);
    }

    public void placeOrder(){
        for(Order e : orders){
            e.execute();
        }
        orders.clear();// once all the orders are placed by the broker then, the list should be emptied
    }
}

主要

public class Main {
    public static void main(String args[]){
        //requests
        Stock stock = new Stock("TCS",20);
        Stock stock2 = new Stock("Infy",10);
        //requests wrapped inside object(order) as commands
        Order order1 = new BuyOrder(stock);
        Order order2 = new SellOrder(stock2);

        //order is sent to the broker 
        Broker broker = new Broker();
        broker.addOrder(order1);
        broker.addOrder(order2);

        //broker at runtime decides the appropriate Object for the reference Order
        //in other words the invokers decide which object is appropriate and can handle this command/Order
        broker.placeOrder();
    }
}

出力:

[Buy order of quantity 20 for stock TCS has been performed]
[Sell order of quantity 10 for stock Infy has been performed]

このパターンの重要なポイント

  • OCP および SIP の堅固な原則に従います。
  • 注文の種類は実行時に判明します
リリースステートメント この記事は次の場所に転載されています: https://dev.to/prashantrmishra/command-p16?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3