ĐỊ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à
Trang 1VISITOR 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
Trang 2NỘ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
Trang 3ĐẶT VẤN ĐỀ
3
Trang 4CÁCH CÀI ĐẶT TRUYỀN THỐNG
4
Trang 5CÁCH CÀI ĐẶT TRUYỀN THỐNG
5
interface Animal {
void say();
}
class Dog implements Animal {
public void gogo() { }
public void hehe() { }
@override public void say
{ gogo(); }
}
class Cat implements Animal {
public void meomeo() { }
public void hihi() { }
@override public void say() {meomeo(); }
}
void somewhere() {
Animal a = ;
a.say();
}
Trang 6interface Animal {
void accept(Visitor v);
}
interface Visitor {
// đây là hai method được chuâ( n bị sẵ, n
void visit(Dog dog);
void visit(Cat cat);
}
class Dog implements Animal {
@override public void accept(Visitor
v) {
// trao thân mình cho Dog
v.visit(this);
}
public void gogo() { }
public void hehe() { }
}
class Cat implements Animal {
@override public void accept(Visitor v) {
// trao thân mình cho Cat :v
v.visit(this);
}
public void meomeo() { }
public void hihi() { }
}
class SayVisitor implements Visitor {
@override public void visit(Dog dog) {
dog.gogo(); // quá dễ, dàng
}
@override public void visit(Cat cat) {
cat.meomeo(); // quá dễ, dàng
} }
CÁCH CÀI ĐẶT KHÁC
Trang 7LƯỢC ĐỒ UML
7
Trang 8ĐỊ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
Trang 9THIẾT KẾ
9
Visitor
Các lớp visitor
Các lớp của các đối tượng trong tập hợp các đối tượng
Client
Trang 10LƯỢC ĐỒ UML
10
Trang 11VẤN ĐỀ PHÁT SINH
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
Phát sinh vấn đề mới:
Trang 12BIỂN THỂ ACYCLIC VISITOR
Trang 13PATTERN 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
Trang 14Ư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
Trang 15DEMO