VISITOR DESIGN PATTERN
Lecturer: Nguyễn Trần Thi Văn
Group 12: Phùng Duy Thành
– 14110179
Nguyễn Quang Vũ
– 14110240
Hoàng Văn Công
– 14110014
Phạm Minh Thi – 14110186
Nội Dung Báo Cáo
Đặt vấn đề, cài đặt
Giới thiệu Visitor
Cấu trúc cơ bản
Biến thể
Các mẫu liên quan
Ưu và nhược điểm
Demo minh họa
2
Đặt vấn đề
3
Cách cài đặt truyền thống
4
Cách cài đặt truyền thống
class Cat implements Animal {
interface Animal {
void say();
}
class Dog implements Animal {
public void gogo() {...}
public void hehe() {...}
@override public void say { gogo(); }
}
public void meomeo() {...}
public void hihi() {...}
@override public void say() {meomeo(); }
}
void somewhere() {
Animal a = ...;
a.say();
}
5
Cách Cài đặt khác
interface Animal {
class Cat implements Animal {
void accept(Visitor v);
@override public void accept(Visitor v) {
}
// trao thân mình cho Cat :v
interface Visitor {
v.visit(this);
// đây là hai method được chuâẩ
n bị sẵẵ
n
}
void visit(Dog dog);
public void meomeo() {...}
void visit(Cat cat);
public void hihi() {...}
}
}
class Dog implements Animal {
class SayVisitor implements Visitor {
@override public void accept(Visitor v) {
@override public void visit(Dog dog) {
// trao thân mình cho Dog
dog.gogo(); // quá dễẵdàng
v.visit(this);
}
}
@override public void visit(Cat cat) {
public void gogo() {...}
cat.meomeo(); // quá dễẵdàng
public void hehe() {...}
}
}
}
6
Lược đồ UML
7
Định Nghĩa
• Visitor là mẩu thiết kế (Design Patterns) thuộc Behavior Pattern, cho phép định nghĩa các thao tác (operations) trên một tập
hợp các đối tượng (objects) không đồng nhất (về kiểu) mà không làm thay đổi định nghĩa về lớp (classes) của các đối tượng
đó.
Với mỗi thao tác được thêm vào, một lớp visitor tương ứng được tạo.
8
Thiết KẾ
Các lớp visitor
Visitor
Các lớp của các đối tượng trong tập hợp các
đối tượng
Client
9
Lược đồ UML
10
VẤN ĐỀ PHÁT SINH
Phát sinh vấn đề mới:
Nếu danh sách lớp con của Animal rất hay bị thay đổi, ví dụ khi có thêm lớp Bird, thì rõ ràng
interface Visitor và tất cả các lớp hiện thực nó cũng sẽ bị thay đổi để có thể viếng thăm được thêm
con Bird.
11
Biển thể Acyclic Visitor
12
Pattern Liên Quan
•
Composite: Visitors có thể được sử dụng để truy cập vào một thao tác trên một đối tượng, cấu trúc của nó được xác định bởi
Composite Pattern.
13
ƯU Và Khuyết điểm
Ưu điểm
• Lợi ích cơ bản của Visitor là cho phép chọn đúng phương thức để gọi khi chạy chứ không phải là khi biên dịch, các
phương thức có sẵn được mở rộng dễ dàng.
• Việc thêm các hoạt động mới là dễ dàng.
Khuyết điểm:
• Việc thêm vào các lớp ConcreteElement là rất khó.
• Phá vỡ tính đóng gói.
14
DEMO