Heim  >  Artikel  >  Java  >  So implementieren Sie ein Befehlsmuster im Java-Entwurfsmuster

So implementieren Sie ein Befehlsmuster im Java-Entwurfsmuster

WBOY
WBOYnach vorne
2023-05-10 17:52:061337Durchsuche

Persönliches Verständnis: Trennen Sie mehrere Befehle in einer Klasse und fügen Sie einen Befehl in jede Klasse ein, um eine Entkopplung zu erreichen. Wenn der Befehl verwendet wird, verwaltet eine andere Klasse alle Befehle einheitlich.

Nachteile: Wenn zu viele Funktionen vorhanden sind, werden zu viele Klassen erstellt.

Befehlsmuster ist ein datengesteuertes Entwurfsmuster, das zum Verhaltensmuster gehört. Die Anfrage wird in Form eines Befehls in ein Objekt verpackt und an das aufrufende Objekt übergeben. Das aufrufende Objekt sucht nach einem geeigneten Objekt, das den Befehl verarbeiten kann, und übergibt den Befehl an das entsprechende Objekt, das den Befehl ausführt.

Einführung

Absicht: Kapseln Sie eine Anfrage in ein Objekt, sodass Sie Kunden mit unterschiedlichen Anfragen parametrisieren können.

Hauptlösung: In Softwaresystemen stehen der Verhaltensanforderer und der Verhaltensumsetzer normalerweise in einer engen Beziehung zueinander, aber in einigen Fällen, z Eine Art eng gekoppeltes Design, das Veränderungen nicht widerstehen kann, ist nicht geeignet.

Wann zu verwenden: In manchen Situationen, wie z. B. „Aufzeichnen, Rückgängigmachen/Wiederherstellen, Transaktion“ und andere Verhaltensverarbeitungen, ist diese Art der engen Kopplung, die Änderungen nicht widerstehen kann, unangemessen. Wie kann in diesem Fall der „Verhaltensanforderer“ vom „Verhaltensumsetzer“ entkoppelt werden? Durch die Abstraktion einer Reihe von Verhaltensweisen in Objekte kann eine lose Kopplung zwischen ihnen erreicht werden.

So lösen Sie: Rufen Sie den Empfänger über den Anrufer an, um den Befehl auszuführen. Die Reihenfolge lautet: Anrufer→Befehl→Empfänger.

Schlüsselcode: Trennen Sie die Befehle in der Klasse und erstellen Sie Klassen für sie. Diese Befehlsklassen haben dieselbe übergeordnete Klasse.

Vorteile:

  • Reduzierte Kopplung.

  • Neue Befehle können einfach zum System hinzugefügt werden.

Nachteile: Die Verwendung des Befehlsmodus kann dazu führen, dass einige Systeme über zu viele spezifische Befehlsklassen verfügen.

Verwendungsszenarien: Der Befehlsmodus kann überall dort verwendet werden, wo Befehle in Betracht gezogen werden, wie zum Beispiel: 1. Jede Schaltfläche in der GUI ist ein Befehl. 2. CMD simulieren.

Hinweis: Das System muss den Rückgängig-Vorgang (Undo) und den Wiederherstellungsvorgang (Redo) des Befehls unterstützen, und Sie können auch die Verwendung des Befehlsmodus in Betracht ziehen.

Implementierung

Wir erstellen zunächst die Schnittstelle Order als Befehl und dann die Stock-Klasse als Anforderung. Die Entitätsbefehlsklassen BuyStock und SellStock implementieren die Order-Schnittstelle und führen die eigentliche Befehlsverarbeitung durch. Erstellen Sie als aufrufendes Objekt eine Klasse Broker, die Aufträge entgegennimmt und Aufträge erteilen kann. Brokerobjekte verwenden den Befehlsmodus, um anhand des Befehlstyps zu bestimmen, welches Objekt welchen Befehl ausführt. Die CommandPatternDemo-Klasse verwendet die Broker-Klasse, um das Befehlsmuster zu demonstrieren.

Spezifische Implementierungsschritte

1. Erstellen Sie ein Java-Projekt.

2. Erstellen Sie eine Lageranforderungsklasse Lager.

package src.com.设计模式.命令模式;
/*
* 股票类
* */
public class Stock {
    private String name;
    private int quantity;
    public Stock(String name, int quantity) {
        this.name = name;
        this.quantity = quantity;
    }
    public void buy(){
        System.out.println("股票买入成功"+name+",股数:"+quantity);
    }
    public void sell(){
        System.out.println("股票卖出成功"+name+",股数: "+quantity);
    }
}

3. Erstellen Sie eine Befehlsschnittstellenbestellung.

package src.com.设计模式.命令模式;
public interface Order {
    void execute();
}

4. Erstellen Sie die Entitätsklasse BuyStock, die die Order-Schnittstelle implementiert.

package src.com.设计模式.命令模式;
public class BuyStock implements Order{
    //依赖于Stock对象
    private Stock stock;
    public BuyStock(Stock stock) {
        this.stock = stock;
    }
    @Override
    public void execute() {
        //购买目标股票的业务操作
        stock.buy();
    }
}

5. Erstellen Sie die Entitätsklasse SellStock, die die Order-Schnittstelle implementiert.

package src.com.设计模式.命令模式;
public class SellStock implements Order{
    private Stock stock;

    public SellStock(Stock stock) {
        this.stock = stock;
    }
    @Override
    public void execute() {
        stock.sell();
    }
}

6. Erstellen Sie einen Befehl, der die Klasse Broker aufruft.

package src.com.设计模式.命令模式;
import java.util.ArrayList;
import java.util.List;
/*
* 股票经纪人类
* */
public class Broker {
    private List<Order> orderList = new ArrayList<>();
    //1.接受订单
    public void takeOrder(Order order){
        orderList.add(order);
    }
    //2.执行订单
    public void placeOrders(){
        orderList.forEach(fun ->{
            fun.execute();
        });
    }
}

7. Erstellen Sie die CommandPatternDemo-Klasse und verwenden Sie dann die Broker-Klasse, um Befehle anzunehmen und auszuführen.

package src.com.设计模式.命令模式;
public class CommandPatternDemo {
    public static void main(String[] args) {
        Stock stock = new Stock("002607",100);
        BuyStock buyStock = new BuyStock(stock);
        SellStock sellStock = new SellStock(stock);
        Broker broker = new Broker();
        broker.takeOrder(buyStock);
        broker.takeOrder(sellStock);
        broker.placeOrders();
    }
}

8. Führen Sie das Programm aus und geben Sie die Ergebnisse aus.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie ein Befehlsmuster im Java-Entwurfsmuster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen