Observer Pattern đơn giản dễ dàng

1 min read

Observer Pattern là gì?

Mô hình Observer là một mô hình thiết kế phần mềm, nó cho phép một đối tượng (được gọi là Subject) duy trì danh sách các đối tượng phụ thuộc (được gọi là Observers) và thông báo cho chúng về bất kỳ thay đổi nào về trạng thái.

Cài đặt Observer Pattern

Các thành phần chính trong mô hình Observer bao gồm:

  1. Subject: Đối tượng chứa trạng thái cần theo dõi và thông báo.
  2. Observer: Đối tượng mà Subject thông báo khi trạng thái của nó thay đổi.

Code minh họa

import java.util.ArrayList;
import java.util.List;

// Định nghĩa interface Observer
interface Observer {
    void update(String message);
}

// Định nghĩa đối tượng Subject (User)
class User {
    private String name;
    private String message;
    private List<Observer> observers;

    public User(String name) {
        this.name = name;
        this.observers = new ArrayList<>();
    }

    public void setMessage(String message) {
        this.message = message;
        notifyObservers();
    }

    public String getMessage() {
        return message;
    }

    public void attach(Observer observer) {
        observers.add(observer);
    }

    public void detach(Observer observer) {
        observers.remove(observer);
    }

    private void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(getMessage());
        }
    }
}

// Định nghĩa một đối tượng Observer cụ thể là EmailNotifier
class EmailNotifier implements Observer {
    private User user;

    public EmailNotifier(User user) {
        this.user = user;
    }

    @Override
    public void update(String message) {
        System.out.println("Sending email notification to " + user.getName() + ": " + message);
    }
}

// Định nghĩa một đối tượng Observer khác là SMSNotifier
class SMSNotifier implements Observer {
    private User user;

    public SMSNotifier(User user) {
        this.user = user;
    }

    @Override
    public void update(String message) {
        System.out.println("Sending SMS notification to " + user.getName() + ": " + message);
    }
}

public class Main {
    public static void main(String[] args) {
        User user = new User("Alice");

        EmailNotifier emailNotifier = new EmailNotifier(user);
        SMSNotifier smsNotifier = new SMSNotifier(user);

        user.attach(emailNotifier);
        user.attach(smsNotifier);

        user.setMessage("New message for observers!");

        // Huỷ đăng ký một trong các Observer
        user.detach(emailNotifier);

        user.setMessage("Another message for remaining observers!");
    }
}

Link tham khảo

https://viblo.asia/p/design-pattern-observer-V3m5WO8W5O7

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *