Câu hỏi phỏng vấn Design pattern
Câu hỏi

Design pattern Command là gì?

Câu trả lời

Thuộc nhóm behavioural design pattern dùng để truyền đổi một yêu cầu thành một đối tượng độc lập bao gồm các chi tiết của yêu cầu đó. Pattern này là một data-driven pattern vì ta sử dụng thông tin về yêu cầu bằng cách bọc nó dưới dạng một đối tượng và chuyển đến đối tượng invoker dưới dạng một command. Đối tượng invoker kiểm tra đối tượng có thể xử lý command và truyền cho nó để thực thi.

Design pattern Command là gì?

Ta thấy client gọi đến invoker để thực thi command. Ta có interface Command hành động như một sự trừu tượng hóa đối với các lớp cụ thể bên dưới.

Lấy ví dụ với điều khiển từ xa chỉ có một nút bấm. Sử dụng nút này ta sẽ điều khiển hành vi của hai đối tượng là radio và tubelight. Lệnh điều khiển sẽ được triển khai bằng cách dùng command pattern.

  • Tạo interface Command:
// Command Interface
interface Command
{
    public void execute();
}
  • Tạo lớp tubelight và lớp commands của nó được mở rộng từ interface trên.
// Tubelight class
class TubeLight
{
    public void lightOn(){
        System.out.println("TubeLight on...");
    }
    public void lightOff(){
        System.out.println("TubeLight off...");
    }
}
// Command class to turn on the tubelight
class TubeLightOnCommand implements Command
{
    TubeLight tubeLight;
    // The constructor is passed the light it
    // is going to control.
    public TubeLightOnCommand(TubeLight tubeLight){
        this.tubeLight = tubeLight;
    }
    public void execute(){
        tubeLight.lightOn();
    }
}
// Command class to turn off the tubelight
class TubeLightOffCommand implements Command
{
    TubeLight tubeLight;
    public TubeLightOffCommand(TubeLight tubeLight) {
        this.tubeLight = tubeLight;
    }
    public void execute() {
        tubeLight.lightOff();
    }
}
  • Tạo lớp Radio tương tự
// Radio class
class Radio
{
    public void radioOn()
    {
        System.out.println("Radio on ...");
    }
    public void radioOff()
    {
        System.out.println("Radio off...");
    }
    public void setVolume(int volumeLevel)
    {
        // code to set the volume
        System.out.println("Radio volume set to " + v...
Bạn cần đăng nhập để xem
middle

middle

Gợi ý câu hỏi phỏng vấn

middle

Điều gì sẽ xảy ra nếu chúng ta không có một phương thức synchronized để trả về thực thể Singleton trong môi trường đa luồng?

middle

Design patterndesign principles khác nhau như thế nào?

middle

Null Object pattern là gì?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào