JavaRush /Blog Java /Random-VI /Mẫu lệnh bằng lời nói của bạn
Roman_kh
Mức độ
Харьков

Mẫu lệnh bằng lời nói của bạn

Xuất bản trong nhóm

Xin chào tất cả các thành viên diễn đàn!

Tôi (có vẻ như đối với tôi) đã tìm ra kỹ lưỡng mô hình đó Commandvà tôi muốn thử nói về nó “bằng lời nói của mình”. Mẫu lệnh theo cách nói của bạn - 1Dựa trên Wikipedia, chúng ta có thể thấy rằng mục đích của nó là tạo ra một cấu trúc trong đó lớp gửi và lớp nhận không phụ thuộc trực tiếp vào nhau. Tổ chức một cuộc gọi lại đến một lớp bao gồm lớp người gửi . Về nguyên tắc, nó được viết rõ ràng và chính xác, nhưng đây chỉ là lý thuyết. làm như thế nào? Đây chính là lúc vấn đề bắt đầu, bởi vì... mô tả không còn rõ ràng và rõ ràng nữa. Vì vậy, tôi đã tìm ra, tôi quyết định nói cho bạn biết tôi hiểu nó như thế nào, có thể nó sẽ hữu ích cho ai đó: Dựa trên mô tả mục đích của mẫu này, tôi sẽ kết hợp mô tả với mã để làm cho nó rõ ràng hơn, bởi vì trong cùng một Wikipedia, họ đã khái quát nó cho nhiều ngôn ngữ và do đó phần mô tả được tách ra khỏi ví dụ. Có bốn thuật ngữ trong mẫu này, bây giờ chúng ta hãy coi chúng là đương nhiên: lệnh( command), bộ nhận lệnh( receiver), trình gọi lệnh( invoker) và máy khách( client). Tôi sẽ lấy một ví dụ từ cùng một Wikipedia, nó khá có thể chấp nhận được. Nhiệm vụ là một lớp Lightcó thể làm hai việc: bật đèn và tắt đèn. Về mặt mẫu, nó sẽ là “bộ nhận lệnh ( receiver)”
/*Receiver class*/

public class Light{
     public Light(){  }

     public void turnOn(){
        System.out.println("The light is on");
     }

     public void turnOff(){
        System.out.println("The light is off");
     }
}
Hãy tạo một giao diện với một phương thức execute()sẽ thực thi và được gọi theo mẫu "lệnh ( command)"
/*the Command interface*/

public interface Command{
    void execute();
}
Cần phải gói gọn việc thực hiện các kỹ năng của lớp Light. Để làm điều này, chúng ta sẽ tạo các lớp TurnOnLightCommandTurnOffLightCommandtriển khai giao diện Commandcũng như chấp nhận một đối tượng lớp trong hàm tạo Light. Và mỗi người trong số họ sẽ chỉ thực hiện một hành động. Một người sẽ gọi phương thức này turnOn()và người kia sẽ gọi turnOff().
/*the Command for turning on the light*/

public class TurnOnLightCommand implements Command{
   private Light theLight;

   public TurnOnLightCommand(Light light){
        this.theLight=light;
       }

   public void execute(){
      theLight.turnOn();
   }
}

/*the Command for turning off the light*/

public class TurnOffLightCommand implements Command{
   private Light theLight;

   public TurnOffLightCommand(Light light){
        this.theLight=light;
       }

   public void execute(){
      theLight.turnOff();
   }
}
Bây giờ là lúc tạo một đối tượng chấp nhận các phương thức đối tượng được đóng gói này Light. Về mặt mẫu, nó được gọi là trình gọi lệnh (invoker). Hãy gọi nó Switchvà để nó chấp nhận các biến trong hàm tạo Commandsẽ được sử dụng trong các phương thức đã tạo flipUp()flipDown().
/*the Invoker class*/

public class Switch {
    private Command flipUpCommand;
    private Command flipDownCommand;

    public Switch(Command flipUpCommand,Command flipDownCommand){
         this.flipUpCommand=flipUpCommand;
         this.flipDownCommand=flipDownCommand;
    }

    public void flipUp(){
         flipUpCommand.execute();
    }

    public void flipDown(){
         flipDownCommand.execute();
    }
}
Và tất nhiên, chúng ta sẽ tạo một lớp sẽ sử dụng chúng để hiểu những gì đang diễn ra nói chung. Nó sẽ được gọi là phương thức chính, trong đó tất cả hành động sẽ diễn ra:
/*The test class*/
public class TestCommand{
   public static void main(String[] args){
       // создаем an object, который будет использоваться
       Light l=new Light();
       // создаем an objectы для всех умений an object Light:
       Command switchUp=new TurnOnLightCommand(l);
       Command switchDown=new TurnOffLightCommand(l);

       // Создаемтся invoker, с которым мы будем непосредственно контактировать:
       Switch s=new Switch(switchUp,switchDown);

       // вот проверка этого, используем методы:
       s.flipUp();
       s.flipDown();
   }
}
Đầu ra sẽ như sau:
"The light is on"
"The light is off"

Điều này được áp dụng ở đâu?

Mục đích là rõ ràng điều gì và tại sao điều này lại cần thiết, cụ thể là: trong tình huống bạn cần tách riêng một thực thi cụ thể, điều này rất thuận tiện. Vì vậy, việc sử dụng một số chức năng không phụ thuộc vào việc triển khai cụ thể và nó có thể được thay đổi mà không làm hỏng hệ thống. đại loại như thế này...) Viết nhận xét của bạn, cùng thảo luận, biết đâu cái gì đó có thể đơn giản hơn và kể hay hơn, chúng tôi sẽ chỉnh sửa mọi thứ nếu cần) Để những ai mới đọc lần đầu sẽ hiểu rõ nhất có thể. Chà, ai thích bài viết thì đánh dấu “+” vào đó :) Điều này quan trọng đối với tôi) Theo thời gian, tôi muốn viết nhiều hơn về Builder, Singletonvà những người khác. Xem thêm các bài viết khác của tôi:
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION