コマンド パターンは動作パターンの 1 つで、リクエストが command としてオブジェクト内にラップされ、そのオブジェクトが呼び出し元に渡され、呼び出し元はこのコマンドを処理できる適切なオブジェクトを探します。そしてコマンドを対応するオブジェクトに渡すと、そのオブジェクトがコマンドを実行します。
これも OCP の堅固な原則に従います
株式市場の例を考えてみましょう。株式は売買されるリクエスト (コマンド) であり、この株式は注文の下にラップされ、この注文はブローカー (実行者) に送信されます。 )、ブローカーは注文を分析してこれが買い注文か売り注文かを決定し、最終的に買い注文または売り注文が実行されます(コマンド/リクエストの実行)
在庫(リクエスト)
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 { Listorders; 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]
このパターンの重要なポイント
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3