„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Befehl

Befehl

Veröffentlicht am 04.11.2024
Durchsuche:905

Das

Befehlsmuster ist eines der Verhaltensmuster, bei dem eine Anforderung als Befehl in ein Objekt eingeschlossen wird und dieses Objekt an einen Aufrufer übergeben wird. Der Aufrufer sucht dann nach einem geeigneten Objekt, das diesen Befehl verarbeiten kann und übergibt den Befehl an das entsprechende Objekt, das Objekt führt dann den Befehl aus.

Dies folgt auch dem OCP-Solid-Prinzip

Nehmen wir ein Beispiel der Börse, wo „Aktie“ eine Anfrage ist, die gekauft oder verkauft werden soll (Befehl), diese Aktie wird unter „Order“ verpackt, diese Order wird dann an den Broker (Invoker) gesendet ), analysiert der Broker dann die Order, um zu entscheiden, ob es sich um eine BuyOrder oder SellOrder handelt und schließlich wird eine Kauf- oder Verkaufsorder ausgeführt(Ausführung des Befehls/der Anfrage)

command

Lagerbestand (Anfrage)

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

Auftrag (Anfrage als Befehl in ein Objekt eingebunden)

public interface Order {
    public void execute();
}

Konkrete Bestellungen

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

Broker (Aufrufer, der das entsprechende Objekt auswählt, das den Befehl/die Bestellung verarbeiten kann)

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

Hauptsächlich

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

Ausgabe:

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

Wichtige Punkte für dieses Muster

  • Folgt den soliden Prinzipien von OCP und SIP.
  • Auftragstyp ist zur Laufzeit bekannt
Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/prashantrmishra/command-p16?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3