Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 10

Design Patterns – OOP Pattern và MVC Pattern

1/. Khái niệm:


MVC pattern là viết tắt của Model-View-Controller Pattern. Mẫu này được xây dựng trên nền tảng
OOP để phân tích các lớp của ứng dụng.

 Model: Mô hình đại diện cho một đối tượng hoặc JAVA POJO mang dữ liệu. Nó cũng có thể
có logic để cập nhật khi Controller yêu cầu thay đổi.
 View: Chế độ xem biểu thị trực quan hóa dữ liệu mà Model chứa.
 Controller: Bộ điều khiển hoạt động trên cả Model (mô hình) và View (xem, trình bày). Nó
kiểm soát luồng dữ liệu vào đối tượng của Model và cập nhật View bất cứ khi nào dữ liệu thay
đổi. Nó giữ View và Model riêng biệt.
2/. Thực hiện: (dùng ngôn ngữ Java minh họa)
Chúng ta sẽ tạo một đối tượng Student hoạt động như một Model. StudentView sẽ là một lớp xem
có thể in thông tin chi tiết về sinh viên trên bàn điều khiển và StudentController là lớp điều khiển
chịu trách nhiệm lưu trữ dữ liệu trong đối tượng Student và cập nhật chế độ xem StudentView tương
ứng.
MVC PatternDemo, gói / lớp Application / demo của chúng ta, sẽ sử dụng StudentController để
chứng minh việc sử dụng mẫu MVC.
Cho class Student như sau:

Hình 1: Sơ đồ MVC cho class Student.


Hình 2: Tổ chức các gói của MVC

Chúng ta cần 04 bước thực hiện cho MVC Pattern như sau:
2.1/. Tạo Model: khai báo lớp Student trên nền tảng OOP.

package Model;
public class Student
{
private String rollNo;
private String name;
// có thể có nhiều constructor
// phải có phương thức getter, setter cho các thuộc tính
public Student()
{
}

public Student(String x1, String x2)


{
this.rollNo=x1; this.name=x2;
}

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;
}
}

2.2/. Tạo View: trình bày / xuất dữ liệu

package View;
public class StudentView
{
public void printStudentDetails(String studentName, String
studentRollNo)
{ // hiển thị thông tin của sinh viên
System.out.println("Student: ");
System.out.println("Name: " + studentName);
System.out.println("Roll No: " + studentRollNo);
}
}

2.3/. Tạo Controller: kiểm soát và thực hiện Model và View

package Controller;
import Model.*;
import View.*;
public class StudentController
{
private Student model;
private StudentView view;
// khai báo model, view

public StudentController(Student model, StudentView view)


{ // constructor
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());
}
}

2.4/. Phương thức sử dụng MVC Pattern:


Sử dụng các phương thức StudentController để khai thác và sử dụng mẫu thiết kế theo kiến trúc
MVC.

package Application;
import Model.*;
import View.*;
import Controller.*;

public class MVCPatternDemo


{
private static Student retriveStudentFromDatabase()
{ // tạo hoặc lấy sinh viên từ cơ sở dữ liệu
Student student = new Student();
student.setName("Bill Gates");
student.setRollNo("1001");
return student;
}

public static void main(String[] args)


{
// Tạo hoặc lấy mẫu tin sinh viên từ model
Student model = retriveStudentFromDatabase();
// Tạo một View: để ghi thông tin lên Controller
StudentView view = new StudentView();
StudentController controller = new
StudentController(model, view);

controller.updateView();
//update model data Cập nhật dữ liệu trong Model
controller.setStudentName("Elon Musk");
controller.updateView();
}
}

Kết quả:

3/. Các Parttern khác trong ngôn ngữ lập trình Java:

 Design Patterns - Factory Pattern


 Abstract Factory Pattern
 Design Patterns - Singleton Pattern
 Design Patterns - Builder Pattern
 Design Patterns - Prototype Pattern
 Design Patterns - Adapter Pattern
 Design Patterns - Bridge Pattern
 Design Patterns - Filter Pattern
 Design Patterns - Composite Pattern
 Design Patterns - Decorator Pattern
 Design Patterns - Facade Pattern
 Design Patterns - Flyweight Pattern
 Design Patterns - Proxy Pattern
 Chain of Responsibility Pattern
 Design Patterns - Command Pattern
 Design Patterns - Interpreter Pattern
 Design Patterns - Iterator Pattern
 Design Patterns - Mediator Pattern
 Design Patterns - Memento Pattern
 Design Patterns - Observer Pattern
 Design Patterns - State Pattern
 Design Patterns - Null Object Pattern
 Design Patterns - Strategy Pattern
 Design Patterns - Template Pattern
 Design Patterns - Visitor Pattern
 Design Patterns - MVC Pattern
 Business Delegate Pattern
 Composite Entity Pattern
 Data Access Object Pattern
 Front Controller Pattern
 Intercepting Filter Pattern
 Service Locator Pattern
 Transfer Object Pattern

Lab 8AB
 Sinh viên xây dựng Pattern bằng ngôn ngữ Java, chụp ảnh các gói (package) của Project
Explorer, copy code vào file Lab8_Họ tên sv.docx.
 Nộp bài tại N:\Lab8_N1 | N:\Lab8_N2
Bài tập
Thiết kế OOP pattern và MVC pattern cho Class sau:
A/. Lớp_Học Phần
Giải:

Model:
package Model;
public class Lop_HocPhan
{
private String maLopHP, monHoc;
private int soTC, soSVDK;
// các constructor
public Lop_HocPhan()
{
}

public Lop_HocPhan(String maLopHP, String monHoc, int soTC, int soSVDK)


{
this.maLopHP=maLopHP; this.monHoc=monHoc;
this.soTC=soTC; this.soSVDK=soSVDK;
}
// phương thức getter, setter
public void setmaLopHP(String maLopHP)
{
this.maLopHP=maLopHP;
}

public String getmaLopHP()


{
return this.maLopHP;
}

public void setmonHoc(String monHoc)


{
this.monHoc=monHoc;
}

public String getmonHoc()


{
return this.monHoc;
}

public void setsoTC(int soTC)


{
this.soTC=soTC;
}

public int getsoTC()


{
return this.soTC;
}

public void setsoSVDK(int soSVD)


{
this.soSVDK=soSVD;
}

public int getsoSVDK()


{
return this.soSVDK;
}
}

View:
package View;
public class Lop_HocPhanView
{
public void printLop_HocPhan(String maLopHP, String monHoc, int soTC, int soSVDK)
{
System.out.println("Lớp Học Phần:");
System.out.println("Mã lớp học phần " + maLopHP);
System.out.println("Môn học: " + monHoc);
System.out.println("Số tín chỉ: " + soTC);
System.out.println("Số sinh viên đăng ký: " + soSVDK);
}
}

Controller:
package Controller;
import Model.*;
import View.*;
public class Lop_HocPhanController
{
private Lop_HocPhan model;
private Lop_HocPhanView view;
// constructor
public Lop_HocPhanController(Lop_HocPhan model, Lop_HocPhanView view)
{
this.model=model; this.view = view;
}

//các phương thức getter, setter ở lớp Controller


public void setLop_HocPhanMaLopHP(String maLopHP)
{
model.setmaLopHP(maLopHP);
}

public String getLop_HocPhanMaLopHP()


{
return model.getmaLopHP();
}

public void setLop_HocPhanMonHoc(String monHoc)


{
model.setmonHoc(monHoc);
}

public String getLop_HocPhanMonHoc()


{
return model.getmonHoc();
}

public void setLop_HocPhanSoTC(int soTC)


{
model.setsoTC(soTC);
}

public int getLop_HocPhanSoTC()


{
return model.getsoTC();
}

public void setLop_HocPhanSoSVDK(int soSVDK)


{
model.setsoSVDK(soSVDK);
}

public int getLop_HocPhanSoSVDK()


{
return model.getsoSVDK();
}

public void updateView()


{
view.printLop_HocPhan(model.getmaLopHP(), model.getmonHoc(), model.getsoTC(),
model.getsoSVDK());
}
}

Application:
package Application;
import Model.*;
import View.*;
import Controller.*;

public class Demo


{
private static Lop_HocPhan taoLopHP()
{
Lop_HocPhan x = new Lop_HocPhan();
x.setmaLopHP("1001");
x.setmonHoc("Kiến trúc và Tích hợp hệ thống");
x.setsoTC(3);
x.setsoSVDK(270);
return x;
}

public static void main(String[] args)


{
Lop_HocPhan model = taoLopHP();
Lop_HocPhanView view = new Lop_HocPhanView();
Lop_HocPhanController controller = new Lop_HocPhanController(model, view);
System.out.println("Lớp Học Phần được tạo xong:");
controller.updateView();
// tạo đối tượng lớp học phần mới và xuất thông tin
controller.setLop_HocPhanMonHoc("Kiến trúc phần mềm");
controller.setLop_HocPhanSoSVDK(350);
System.out.println("Lớp Học Phần được cập nhật xong:");
controller.updateView();
// cập nhật đối tượng lớp học phần và xuất thông tin }
}

Kết quả chương trình Demo:

Bài tập
Thiết kế OOP pattern và MVC pattern cho Class sau:
B/.Hàng Hóa

Giải: cách làm tương tự Lab8A trên, chú ý cách đặt tên.

You might also like