Liam de Haas
Liam de Haas

Reputation: 1268

How do I implement the Observer pattern in this MVC pattern program

I have a simplme MVC pattern based program with the following classes:

Student

public class Student {
    private String rollNo;
    private String name;

    public String getRollNo() {
        return rollNo;
    }

    public void setRollNo(String rollNo) {
        this.rollNo = rollNo;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

StudentController

public class StudentController {
    private Student model;
    private StudentView view;

    public StudentController(Student model, StudentView view) {
        this.model = model;
        this.view = view;
    }

    public void setStudentName(String name) {
        model.setName(name);
    }

    public String getStudentName() {
        return model.getName();
    }

    public void setStudentRollNo(String rollNo) {
        model.setRollNo(rollNo);
    }

    public String getStudentRollNo() {
        return model.getRollNo();
    }

    public void updateView() {
        view.printStudentDetails(model.getName(), model.getRollNo());
    }
}

StudentView

public class StudentView {
    public void printStudentDetails(String studentName, String studentRollNo) {
        System.out.println("Student: ");
        System.out.println("Name: " + studentName);
        System.out.println("Roll No: " + studentRollNo);
    }
}

MVCPatternDemo

public class MVCPatternDemo {
    public static void main(String[] args) {

        // fetch student record based on his roll no from the database
        Student model = retriveStudentFromDatabase();

        // Create a view : to write student details on console
        StudentView view = new StudentView();

        StudentController controller = new StudentController(model, view);

        controller.updateView();

        // update model data
        controller.setStudentName("John");

        controller.updateView();
    }

    private static Student retriveStudentFromDatabase() {
        Student student = new Student();
        student.setName("Robert");
        student.setRollNo("10");
        return student;
    }
}

Now I need to implement the Observer Pattern in this program for a school assignment. My main question is: what is the Subject in this case (my guess would be StudentController but i'm not sure) and what are/is the Observer(s)? (my guess would be Student)

I'm not asking for you to write my program to implement it but a 'push' in the right direction would be nice

Upvotes: 1

Views: 747

Answers (1)

Yuriy
Yuriy

Reputation: 1394

Usually the model is the subject (Observable). The idea is: you can change the model from different places (controllers) and all other ones (that subscribed for changes) will be notified. So the controllers are Observers. In this particular example you can implement the Observer pattern to remove the

controller.updateView();

rows from the code. It will be present only in a listener that will listen to changes in a model and update the view.

Upvotes: 3

Related Questions