SlideShare a Scribd company logo
Nội dung
• Các vấn đề thường gặp
• Design Pattern
• Các Design Pattern thông dụng
• Demo
Tỉ lệ thời gian dành cho việc đọc code so với viết code là 10:1
... cho nên cần viết code thế nào đó cho dễ đọc nhất có
thể.
~Robert C. Martin~
Người đần cũng có thể viết code để máy tính hiểu.
Lập trình viên giỏi thì viết code để con người có thể hiểu.
~Martin Fowler~
Đừng có phát minh lại chiếc bánh xe
Học ngôn ngữ lập trình
Từ khoá
• Biến
• Hàm
• Lớp
• Đối tượng
• Biểu thức
• Toán tử
• ...
Cú pháp
• Câu lệnh
• Điều kiện
• Lặp
• Khai báo lớp
• Gọi phương thức
• Định danh
• ...
Style
• Convention
• Nguyên lý
• Pattern
• ...
Thiết kế là gì?
Phân tích và giải quyết vấn đề
Thế nào là một thiết kế tốt?
• Không chỉ giải quyết được vấn đề hiện tại
Mà còn giải quyết được vấn đề trong tương
lai
• Không chỉ chạy tốt khi hệ thống còn nhỏ
Mà còn chạy tốt khi hệ thống lớn hơn
• Không chỉ chạy tốt với phiên bản hiện tại
Mà còn có thể thêm nhiều phiên bản khác
Có một thứ không bao giờ thay đổi
Đó là THAY ĐỔI
Design Principles
• Encapsulate what varies
• Favor composition over inheritance
• Programming to interfaces not to implementations
• Strive for loosely coupled between objects that interact
• Classes should OPEN for extension and CLOSE for
modification
• Depends on abstraction, not concrete classes
• Don't call us, we'll call you
• A class should have only one reason to change
Templates
Pattern ở mọi nơi
Pattern ở mọi nơi
Pattern ở mọi nơi
Design Pattern là gì?
• Là một giải pháp tổng quát tái sử dụng được cho các vấn đề
thông dụng
• Là một mẫu hoặc mô tả cách giải quyết một vấn đề
• Một kỹ thuật đã được kiểm chứng
• Design Pattern không phải là bản thiết kế hoàn chỉnh có thể
dùng để chuyển hoá trực tiếp thành mã nguồn.
• Design Pattern là các khuôn mẫu (template) để giải quyết vấn
đề trong các tình huống khác nhau.
Tại sao cần Design Pattern?
• Đẩy nhanh tốc độ thiết kế và phát triển phần mềm
• Chất lượng của giải pháp đã được minh chứng
• Ngăn ngừa các vấn đề phát sinh nếu thiết kế không tốt
• Có thể áp dụng cho rất nhiều tình huống khác nhau
• Dễ dàng cộng tác, chia sẻ thiết kế và mã nguồn giữa các bên
Phân loại Design Pattern
Design
Patterns
Creational
BehavioralStructural
Các đối tượng được
tạo ra như thế nào?
Các đối tượng được
cấu tạo như thế nào?
Các đối tượng tương
tác như thế nào?
Áp dụng
Design Pattern dễ hay khó?
Singleton
• Đảm bảo rằng một lớp chỉ có một đối tượng thể hiện và cung
cấp truy cập đối tượng này với phạm vi toàn ứng dụng.
Singleton: demo
• Tạo một kết nối duy nhất đến CSDL
Proxy
• Đưa ra một đại diện, thay thế cho một đối tượng để kiếm soát
quyền truy cập vào nó.
Proxy: demo
• Kiểm tra đầu vào cho các phương thức của lớp Calculator
Façade
• Cung cấp một giao diện nhất quán cho các giao diện khác ở
trong các hệ thống con
Façade: demo
• Cung cấp một API đơn giản để chia sẻ lên các mạng xã hội
Template Method
• Định nghĩa bộ khung các bước cho một thuật toán. Để lại cho
các lớp con tự khai báo các bước cụ thể.
Template Method: demo
• Quy định các bước để in một trang tài liệu
Command
• Đóng gói một yêu cầu thành một đối tượng, cho phép client sử
dụng nhiều request khác nhau
Command: demo
• Cài đặt command cho một remote control
Design Pattern - Những công thức vàng trong thiết kế

More Related Content

What's hot

Giáo trình Tester Full
Giáo trình Tester FullGiáo trình Tester Full
Giáo trình Tester FullThanh Sơn
 
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMTÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
Nguyễn Anh
 
Đề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đ
Đề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đĐề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đ
Đề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đ
Dịch Vụ Viết Bài Trọn Gói ZALO 0917193864
 
Quản lý dự án
Quản lý dự ánQuản lý dự án
Quản lý dự ánTran Tien
 
Como o Cucumber Funciona
Como o Cucumber FuncionaComo o Cucumber Funciona
Como o Cucumber Funciona
Laís Berlatto
 
Kiem thu phan mem
Kiem thu phan memKiem thu phan mem
Kiem thu phan mem
TIen Le
 
JavaScript (Tieng viet)
JavaScript (Tieng viet)JavaScript (Tieng viet)
JavaScript (Tieng viet)
Park Ji Hưng
 
Chuong 2. cnpm
Chuong 2. cnpmChuong 2. cnpm
Chuong 2. cnpm
caolanphuong
 
Đồ Án Tìm Hiểu Phần Mềm Loadrunner Kiểm Tra Hiệu Năng Website
Đồ Án Tìm Hiểu Phần Mềm Loadrunner Kiểm Tra Hiệu Năng Website Đồ Án Tìm Hiểu Phần Mềm Loadrunner Kiểm Tra Hiệu Năng Website
Đồ Án Tìm Hiểu Phần Mềm Loadrunner Kiểm Tra Hiệu Năng Website
nataliej4
 
Báo cáo Quản lý dự án phần mềm PTIT
Báo cáo Quản lý dự án phần mềm PTITBáo cáo Quản lý dự án phần mềm PTIT
Báo cáo Quản lý dự án phần mềm PTIT
Popping Khiem - Funky Dance Crew PTIT
 
Đồ án kiểm thử phần mềm
Đồ án kiểm thử phần mềmĐồ án kiểm thử phần mềm
Đồ án kiểm thử phần mềm
Nguyễn Anh
 
Bài giảng Công Nghệ Phần Mềm
Bài giảng Công Nghệ Phần MềmBài giảng Công Nghệ Phần Mềm
Bài giảng Công Nghệ Phần Mềm
Hoài Phạm
 
Chương trình Quản lý Nhà Sách
Chương trình Quản lý Nhà SáchChương trình Quản lý Nhà Sách
Chương trình Quản lý Nhà Sách
BIC
 
Flutter trong lập trình mobile - HUFLIT 2022
Flutter trong lập trình mobile - HUFLIT 2022Flutter trong lập trình mobile - HUFLIT 2022
Flutter trong lập trình mobile - HUFLIT 2022
HongDuyLe1
 
Giới thiệu cách sử dụng Bootstrap CSS Framework
Giới thiệu cách sử dụng Bootstrap CSS FrameworkGiới thiệu cách sử dụng Bootstrap CSS Framework
Giới thiệu cách sử dụng Bootstrap CSS Framework
hocwebgiare
 
KIỂM THỬ WEB BẰNG CÔNG CỤ SELENIUM.doc
KIỂM THỬ WEB BẰNG CÔNG CỤ SELENIUM.docKIỂM THỬ WEB BẰNG CÔNG CỤ SELENIUM.doc
KIỂM THỬ WEB BẰNG CÔNG CỤ SELENIUM.doc
Dịch Vụ Viết Bài Trọn Gói ZALO 0917193864
 
Bài giảng HTML5-CSS3
Bài giảng HTML5-CSS3Bài giảng HTML5-CSS3
Bài giảng HTML5-CSS3
Lương Bá Hợp
 
luan van thac si xay dung ung dung android xem truyen tranh online
luan van thac si xay dung ung dung android xem truyen tranh onlineluan van thac si xay dung ung dung android xem truyen tranh online
luan van thac si xay dung ung dung android xem truyen tranh online
Dịch vụ viết thuê Luận Văn - ZALO 0932091562
 
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư việnSlide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
The Nguyen Manh
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introduction
Tung Nguyen Thanh
 

What's hot (20)

Giáo trình Tester Full
Giáo trình Tester FullGiáo trình Tester Full
Giáo trình Tester Full
 
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMTÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
 
Đề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đ
Đề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đĐề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đ
Đề tài: Kiểm thử phần mềm trên thiết bị di động, HAY, 9đ
 
Quản lý dự án
Quản lý dự ánQuản lý dự án
Quản lý dự án
 
Como o Cucumber Funciona
Como o Cucumber FuncionaComo o Cucumber Funciona
Como o Cucumber Funciona
 
Kiem thu phan mem
Kiem thu phan memKiem thu phan mem
Kiem thu phan mem
 
JavaScript (Tieng viet)
JavaScript (Tieng viet)JavaScript (Tieng viet)
JavaScript (Tieng viet)
 
Chuong 2. cnpm
Chuong 2. cnpmChuong 2. cnpm
Chuong 2. cnpm
 
Đồ Án Tìm Hiểu Phần Mềm Loadrunner Kiểm Tra Hiệu Năng Website
Đồ Án Tìm Hiểu Phần Mềm Loadrunner Kiểm Tra Hiệu Năng Website Đồ Án Tìm Hiểu Phần Mềm Loadrunner Kiểm Tra Hiệu Năng Website
Đồ Án Tìm Hiểu Phần Mềm Loadrunner Kiểm Tra Hiệu Năng Website
 
Báo cáo Quản lý dự án phần mềm PTIT
Báo cáo Quản lý dự án phần mềm PTITBáo cáo Quản lý dự án phần mềm PTIT
Báo cáo Quản lý dự án phần mềm PTIT
 
Đồ án kiểm thử phần mềm
Đồ án kiểm thử phần mềmĐồ án kiểm thử phần mềm
Đồ án kiểm thử phần mềm
 
Bài giảng Công Nghệ Phần Mềm
Bài giảng Công Nghệ Phần MềmBài giảng Công Nghệ Phần Mềm
Bài giảng Công Nghệ Phần Mềm
 
Chương trình Quản lý Nhà Sách
Chương trình Quản lý Nhà SáchChương trình Quản lý Nhà Sách
Chương trình Quản lý Nhà Sách
 
Flutter trong lập trình mobile - HUFLIT 2022
Flutter trong lập trình mobile - HUFLIT 2022Flutter trong lập trình mobile - HUFLIT 2022
Flutter trong lập trình mobile - HUFLIT 2022
 
Giới thiệu cách sử dụng Bootstrap CSS Framework
Giới thiệu cách sử dụng Bootstrap CSS FrameworkGiới thiệu cách sử dụng Bootstrap CSS Framework
Giới thiệu cách sử dụng Bootstrap CSS Framework
 
KIỂM THỬ WEB BẰNG CÔNG CỤ SELENIUM.doc
KIỂM THỬ WEB BẰNG CÔNG CỤ SELENIUM.docKIỂM THỬ WEB BẰNG CÔNG CỤ SELENIUM.doc
KIỂM THỬ WEB BẰNG CÔNG CỤ SELENIUM.doc
 
Bài giảng HTML5-CSS3
Bài giảng HTML5-CSS3Bài giảng HTML5-CSS3
Bài giảng HTML5-CSS3
 
luan van thac si xay dung ung dung android xem truyen tranh online
luan van thac si xay dung ung dung android xem truyen tranh onlineluan van thac si xay dung ung dung android xem truyen tranh online
luan van thac si xay dung ung dung android xem truyen tranh online
 
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư việnSlide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introduction
 

Similar to Design Pattern - Những công thức vàng trong thiết kế

T d que_lap_trinh_huong_doi_tuong
T d que_lap_trinh_huong_doi_tuongT d que_lap_trinh_huong_doi_tuong
T d que_lap_trinh_huong_doi_tuong
toiseden91
 
Lap trinh huong doi tuong voi java tran dinh que
Lap trinh huong doi tuong voi java   tran dinh queLap trinh huong doi tuong voi java   tran dinh que
Lap trinh huong doi tuong voi java tran dinh que
Nguyễn Công Hoàng
 
Lập trình hướng đối tượng với Java - Trần Đình Quế
Lập trình hướng đối tượng với Java  - Trần Đình QuếLập trình hướng đối tượng với Java  - Trần Đình Quế
Lập trình hướng đối tượng với Java - Trần Đình Quế
f3vthd
 
Lthdt
LthdtLthdt
Lthdt
tammao123
 
Lap trinhhuongdoituong v3.1
Lap trinhhuongdoituong v3.1Lap trinhhuongdoituong v3.1
Lap trinhhuongdoituong v3.1volll
 
Câu hỏi phỏng vấn.pdf
Câu hỏi phỏng vấn.pdfCâu hỏi phỏng vấn.pdf
Câu hỏi phỏng vấn.pdf
Growup Work
 
How to write good code
How to write good code How to write good code
How to write good code
Minh Hoang
 
Oop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượngOop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượng
Tráng Hà Viết
 
Lập trình hướng đối tượng với java
Lập trình hướng đối tượng với javaLập trình hướng đối tượng với java
Lập trình hướng đối tượng với java
Ngô Đăng Tân
 
OOP
OOPOOP
Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++
Da To
 
Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?
Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?
Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?
ITguru.vn
 
mo-hinh-phat-trien.pdf
mo-hinh-phat-trien.pdfmo-hinh-phat-trien.pdf
mo-hinh-phat-trien.pdf
ZACNguyenHoang
 
Clean code
Clean codeClean code
Clean code
Đàm Đàm
 
Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++
Thang DV
 
C++ bưu chính viễn thông
C++ bưu chính viễn thôngC++ bưu chính viễn thông
C++ bưu chính viễn thông
Tiên Lý Rau Rút
 
Bai giang c++
Bai giang c++Bai giang c++
Bai giang c++
Nhân Tâm
 
Bai giang c++
Bai giang c++Bai giang c++
Bai giang c++
Thang DV
 

Similar to Design Pattern - Những công thức vàng trong thiết kế (20)

T d que_lap_trinh_huong_doi_tuong
T d que_lap_trinh_huong_doi_tuongT d que_lap_trinh_huong_doi_tuong
T d que_lap_trinh_huong_doi_tuong
 
Lap trinh huong doi tuong voi java tran dinh que
Lap trinh huong doi tuong voi java   tran dinh queLap trinh huong doi tuong voi java   tran dinh que
Lap trinh huong doi tuong voi java tran dinh que
 
Lập trình hướng đối tượng với Java - Trần Đình Quế
Lập trình hướng đối tượng với Java  - Trần Đình QuếLập trình hướng đối tượng với Java  - Trần Đình Quế
Lập trình hướng đối tượng với Java - Trần Đình Quế
 
Lthdt
LthdtLthdt
Lthdt
 
Lap trinhhuongdoituong v3.1
Lap trinhhuongdoituong v3.1Lap trinhhuongdoituong v3.1
Lap trinhhuongdoituong v3.1
 
Câu hỏi phỏng vấn.pdf
Câu hỏi phỏng vấn.pdfCâu hỏi phỏng vấn.pdf
Câu hỏi phỏng vấn.pdf
 
How to write good code
How to write good code How to write good code
How to write good code
 
Oop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượngOop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượng
 
Lập trình hướng đối tượng với java
Lập trình hướng đối tượng với javaLập trình hướng đối tượng với java
Lập trình hướng đối tượng với java
 
OOP
OOPOOP
OOP
 
Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++
 
Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?
Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?
Bạn cần chuẩn bị gì khi đi phỏng vấn vị trí DevOps?
 
mo-hinh-phat-trien.pdf
mo-hinh-phat-trien.pdfmo-hinh-phat-trien.pdf
mo-hinh-phat-trien.pdf
 
Clean code
Clean codeClean code
Clean code
 
Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++
 
C++ buu chinh vien thong
C++ buu chinh vien thongC++ buu chinh vien thong
C++ buu chinh vien thong
 
C++ bưu chính viễn thông
C++ bưu chính viễn thôngC++ bưu chính viễn thông
C++ bưu chính viễn thông
 
Ngon ngu lap_trinh_c__
Ngon ngu lap_trinh_c__Ngon ngu lap_trinh_c__
Ngon ngu lap_trinh_c__
 
Bai giang c++
Bai giang c++Bai giang c++
Bai giang c++
 
Bai giang c++
Bai giang c++Bai giang c++
Bai giang c++
 

More from Nhật Nguyễn Khắc

Reflective Learning
Reflective LearningReflective Learning
Reflective Learning
Nhật Nguyễn Khắc
 
Livestream - Nhật ký học lập trình
Livestream - Nhật ký học lập trìnhLivestream - Nhật ký học lập trình
Livestream - Nhật ký học lập trình
Nhật Nguyễn Khắc
 
Livestream - Học lập trình là học gì?
Livestream - Học lập trình là học gì?Livestream - Học lập trình là học gì?
Livestream - Học lập trình là học gì?
Nhật Nguyễn Khắc
 
Hội thảo nghề nghiệp tại CodeGym 6/6/2020
Hội thảo nghề nghiệp tại CodeGym 6/6/2020Hội thảo nghề nghiệp tại CodeGym 6/6/2020
Hội thảo nghề nghiệp tại CodeGym 6/6/2020
Nhật Nguyễn Khắc
 
WHY DO WE REPORT?
WHY DO WE REPORT?WHY DO WE REPORT?
WHY DO WE REPORT?
Nhật Nguyễn Khắc
 
Live stream: Học lập trình
Live stream: Học lập trìnhLive stream: Học lập trình
Live stream: Học lập trình
Nhật Nguyễn Khắc
 
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Nhật Nguyễn Khắc
 
Clean code coding like a professional
Clean code   coding like a professionalClean code   coding like a professional
Clean code coding like a professional
Nhật Nguyễn Khắc
 

More from Nhật Nguyễn Khắc (8)

Reflective Learning
Reflective LearningReflective Learning
Reflective Learning
 
Livestream - Nhật ký học lập trình
Livestream - Nhật ký học lập trìnhLivestream - Nhật ký học lập trình
Livestream - Nhật ký học lập trình
 
Livestream - Học lập trình là học gì?
Livestream - Học lập trình là học gì?Livestream - Học lập trình là học gì?
Livestream - Học lập trình là học gì?
 
Hội thảo nghề nghiệp tại CodeGym 6/6/2020
Hội thảo nghề nghiệp tại CodeGym 6/6/2020Hội thảo nghề nghiệp tại CodeGym 6/6/2020
Hội thảo nghề nghiệp tại CodeGym 6/6/2020
 
WHY DO WE REPORT?
WHY DO WE REPORT?WHY DO WE REPORT?
WHY DO WE REPORT?
 
Live stream: Học lập trình
Live stream: Học lập trìnhLive stream: Học lập trình
Live stream: Học lập trình
 
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
Agile Education - Classroms need Agility - Agile Vietnam Conference 2018
 
Clean code coding like a professional
Clean code   coding like a professionalClean code   coding like a professional
Clean code coding like a professional
 

Design Pattern - Những công thức vàng trong thiết kế

  • 1.
  • 2. Nội dung • Các vấn đề thường gặp • Design Pattern • Các Design Pattern thông dụng • Demo
  • 3. Tỉ lệ thời gian dành cho việc đọc code so với viết code là 10:1 ... cho nên cần viết code thế nào đó cho dễ đọc nhất có thể. ~Robert C. Martin~
  • 4. Người đần cũng có thể viết code để máy tính hiểu. Lập trình viên giỏi thì viết code để con người có thể hiểu. ~Martin Fowler~
  • 5. Đừng có phát minh lại chiếc bánh xe
  • 6. Học ngôn ngữ lập trình Từ khoá • Biến • Hàm • Lớp • Đối tượng • Biểu thức • Toán tử • ... Cú pháp • Câu lệnh • Điều kiện • Lặp • Khai báo lớp • Gọi phương thức • Định danh • ... Style • Convention • Nguyên lý • Pattern • ...
  • 7. Thiết kế là gì? Phân tích và giải quyết vấn đề
  • 8. Thế nào là một thiết kế tốt? • Không chỉ giải quyết được vấn đề hiện tại Mà còn giải quyết được vấn đề trong tương lai • Không chỉ chạy tốt khi hệ thống còn nhỏ Mà còn chạy tốt khi hệ thống lớn hơn • Không chỉ chạy tốt với phiên bản hiện tại Mà còn có thể thêm nhiều phiên bản khác
  • 9. Có một thứ không bao giờ thay đổi Đó là THAY ĐỔI
  • 10. Design Principles • Encapsulate what varies • Favor composition over inheritance • Programming to interfaces not to implementations • Strive for loosely coupled between objects that interact • Classes should OPEN for extension and CLOSE for modification • Depends on abstraction, not concrete classes • Don't call us, we'll call you • A class should have only one reason to change
  • 15.
  • 16.
  • 17.
  • 18.
  • 19. Design Pattern là gì? • Là một giải pháp tổng quát tái sử dụng được cho các vấn đề thông dụng • Là một mẫu hoặc mô tả cách giải quyết một vấn đề • Một kỹ thuật đã được kiểm chứng • Design Pattern không phải là bản thiết kế hoàn chỉnh có thể dùng để chuyển hoá trực tiếp thành mã nguồn. • Design Pattern là các khuôn mẫu (template) để giải quyết vấn đề trong các tình huống khác nhau.
  • 20. Tại sao cần Design Pattern? • Đẩy nhanh tốc độ thiết kế và phát triển phần mềm • Chất lượng của giải pháp đã được minh chứng • Ngăn ngừa các vấn đề phát sinh nếu thiết kế không tốt • Có thể áp dụng cho rất nhiều tình huống khác nhau • Dễ dàng cộng tác, chia sẻ thiết kế và mã nguồn giữa các bên
  • 21. Phân loại Design Pattern Design Patterns Creational BehavioralStructural Các đối tượng được tạo ra như thế nào? Các đối tượng được cấu tạo như thế nào? Các đối tượng tương tác như thế nào?
  • 22.
  • 23. Áp dụng Design Pattern dễ hay khó?
  • 24. Singleton • Đảm bảo rằng một lớp chỉ có một đối tượng thể hiện và cung cấp truy cập đối tượng này với phạm vi toàn ứng dụng.
  • 25. Singleton: demo • Tạo một kết nối duy nhất đến CSDL
  • 26. Proxy • Đưa ra một đại diện, thay thế cho một đối tượng để kiếm soát quyền truy cập vào nó.
  • 27. Proxy: demo • Kiểm tra đầu vào cho các phương thức của lớp Calculator
  • 28. Façade • Cung cấp một giao diện nhất quán cho các giao diện khác ở trong các hệ thống con
  • 29. Façade: demo • Cung cấp một API đơn giản để chia sẻ lên các mạng xã hội
  • 30. Template Method • Định nghĩa bộ khung các bước cho một thuật toán. Để lại cho các lớp con tự khai báo các bước cụ thể.
  • 31. Template Method: demo • Quy định các bước để in một trang tài liệu
  • 32. Command • Đóng gói một yêu cầu thành một đối tượng, cho phép client sử dụng nhiều request khác nhau
  • 33. Command: demo • Cài đặt command cho một remote control