"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > commande

commande

Publié le 2024-11-04
Parcourir:430

Le modèle de commande est l'un des modèles comportementaux, dans lequel une requête est enveloppée dans un objet en tant que commande et cet objet est transmis à un invocateur, l'invocateur recherche ensuite un objet approprié qui peut gérer cette commande. et transmet la commande à l'objet correspondant, l'objet exécute ensuite la commande.

Cela suit également le principe solide d'OCP

Prenons un exemple du marché boursier, où Stock est une demande qui doit être achetée ou vendue (commande), ce Stock est enveloppé sous Ordre, cet Ordre est ensuite envoyé au courtier (Invoker ), le courtier analyse ensuite l'ordre pour décider s'il s'agit d'un ordre d'achat ou d'un ordre de vente et enfin l'ordre d'achat ou de vente est exécuté (exécution de la commande/demande)

command

Stock (demande)

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]");
    }
}

Ordre (requête enveloppée dans un objet sous forme de commande)

public interface Order {
    public void execute();
}

Commandes de béton

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();
    }
}

Courtier (Invocateur qui choisit l'objet approprié pouvant gérer la commande/la commande)

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
    }
}

Principal

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();
    }
}

Sortir:

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

Points clés de ce modèle

  • Suit les principes solides d'OCP et de SIP.
  • Le type de commande est connu au moment de l'exécution
Déclaration de sortie Cet article est reproduit sur : https://dev.to/prashantrmishra/command-p16?1 En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3