>  기사  >  Java  >  Java 디자인 패턴에서 명령 패턴을 구현하는 방법

Java 디자인 패턴에서 명령 패턴을 구현하는 방법

WBOY
WBOY앞으로
2023-05-10 17:52:061391검색

개인적 이해: 클래스에서 여러 명령을 분리하고 각 클래스에 하나의 명령을 넣어 분리합니다. 하나의 클래스는 하나의 기능에만 해당합니다. 명령을 사용할 때 다른 클래스는 모든 명령을 균일하게 관리합니다.

단점: 함수가 너무 많으면 클래스가 너무 많이 생성됩니다.

명령 패턴은 행동 패턴에 속하는 데이터 기반 디자인 패턴입니다. 요청은 명령 형태로 개체에 래핑되어 호출 개체에 전달됩니다. 호출 객체는 명령을 처리할 수 있는 적절한 객체를 찾아 명령을 실행하는 해당 객체에 명령을 전달합니다.

Introduction

Intent: 요청을 개체로 캡슐화하여 다양한 요청으로 고객을 매개변수화할 수 있습니다.

주요 솔루션: 소프트웨어 시스템에서 동작 요청자와 동작 구현자는 일반적으로 긴밀하게 결합된 관계에 있지만, 어떤 경우에는 동작, 트랜잭션 등을 기록, 취소 또는 다시 실행해야 하는 경우가 있습니다. 변화에 저항할 수 없는 긴밀하게 결합된 디자인은 적합하지 않습니다.

사용 시기: "기록, 실행 취소/다시 실행, 트랜잭션" 및 기타 동작 처리와 같은 일부 상황에서는 변경을 거부할 수 없는 이러한 긴밀한 결합은 부적절합니다. 이 경우 "행동 구현자"에서 "행동 요청자"를 분리하는 방법은 무엇입니까? 일련의 동작을 개체로 추상화하면 동작 간의 느슨한 결합을 달성할 수 있습니다.

해결 방법: 호출자를 통해 수신자를 호출하여 명령을 실행하며 순서는 호출자→명령→수신자입니다.

핵심 코드: 클래스에서 명령을 분리하고 해당 명령 클래스에 대한 클래스를 만듭니다.

장점:

  • 결합 감소.

  • 새로운 명령을 시스템에 쉽게 추가할 수 있습니다.

단점: 명령 모드를 사용하면 일부 시스템에 특정 명령 클래스가 너무 많아질 수 있습니다.

사용 시나리오: 명령 모드는 다음과 같이 명령이 고려되는 모든 곳에서 사용할 수 있습니다. 1. GUI의 모든 버튼은 명령입니다. 2. CMD를 시뮬레이션합니다.

참고: 시스템은 명령의 실행 취소(Undo) 작업 및 복구(Redo) 작업을 지원해야 하며 명령 모드 사용을 고려할 수도 있습니다.

Implementation

먼저 명령으로 Order 인터페이스를 만든 다음 요청으로 Stock 클래스를 만듭니다. 엔터티 명령 클래스 BuyStock 및 SellStock은 Order 인터페이스를 구현하고 실제 명령 처리를 수행합니다. 주문을 받고 주문할 수 있는 호출 개체로 Broker 클래스를 만듭니다. Broker 개체는 명령 모드를 사용하여 명령 유형에 따라 어떤 개체가 어떤 명령을 실행하는지 결정합니다. CommandPatternDemo 클래스는 Broker 클래스를 사용하여 명령 패턴을 보여줍니다.

특정 구현 단계

1. Java 프로젝트를 생성합니다.

2. 재고 요청 클래스를 만듭니다.

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. 명령 인터페이스 주문을 만듭니다.

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

4. Order 인터페이스를 구현하는 BuyStock 엔터티 클래스를 만듭니다.

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. Order 인터페이스를 구현하는 SellStock 엔터티 클래스를 만듭니다.

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. Broker 클래스를 호출하는 명령을 만듭니다.

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. CommandPatternDemo 클래스를 생성한 다음 Broker 클래스를 사용하여 명령을 수락하고 실행합니다.

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. 프로그램을 실행하고 결과를 출력합니다.

위 내용은 Java 디자인 패턴에서 명령 패턴을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제