Bài giảng Mẫu thiết kế hướng đối tượng và ứng dụng: Mẫu Singleton - Nguyễn Minh Huy
lượt xem 3
download
Bài giảng "Mẫu thiết kế hướng đối tượng và ứng dụng: Mẫu Singleton" trình bày ngữ cảnh mẫu Singleton, hướng tiếp cận mẫu Singleton, cài đặt, các vấn đề xung quanh mẫu Singleton. Mời các bạn cùng tham khảo nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Mẫu thiết kế hướng đối tượng và ứng dụng: Mẫu Singleton - Nguyễn Minh Huy
- Mẫu Singleton GV. Nguyễn Minh Huy Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt 1
- Mẫu Singleton Ngữ cảnh cảnh:: Bài toán toán:: Đối tượng Application trong ứng dụng dụng.. Đối tượng Cookies trên Web Server. Connection Pool. Mục tiêu tiêu:: Một lớp chỉ cần có MỘT thể hiện (instance). Mở rộng: rộng: một lớp chỉ cần có xác định N thể hiện hiện.. Các thể hiện này được chỉa sẻ trên toàn ứng dụng dụng.. Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt 2
- Mẫu Singleton Hướng tiếp cận cận:: Chia sẻ thể hiện của lớp trên toàn ứng dụng dụng:: Dùng thuộc tính static để lưu một thể hiện của lớp. lớp. Đảm bảo lớp chỉ có MỘT thể hiện: hiện: Đưa constructor vào tầm vực private. Cung cấp hàm static để trả về thể hiện đã lưu. lưu. Điều khiển được quá trình khởi tạo đối tượng tượng.. Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt 3
- Mẫu Singleton Cài đặt đặt:: class Cookies void main main() () { { private: Cookies *c1 = Cookies. Cookies.getCookies getCookies() ();; static Cookies* m_cookies m_cookies;; // Thêm cookiesX Cookies();; Cookies() // Bớt cookiesX public: static Cookies* getCookies getCookies() () Cookies *c2 = Cookies. Cookies.getCookies getCookies() ();; { // Thêm bớt cookiesX return m_cookies m_cookies;; } } }; // Khởi tạo thể hiện dùng chung chung.. Cookies* Cookies::m_cookies Cookies::m_cookies = new Cookies(); Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt 4
- Mẫu Singleton Các vấn đề xung quanh quanh:: Khởi tạo trễ (lazy loading): Thuộc tính static được khởi tạo khi truy xuất lớp lần đầu đầu.. Sử dụng bộ nhớ không hiệu quả quả.. Cách thức khởi tạo trễ trễ:: B1: Nếu chưa khởi tạo Khởi thể hiện dùng chung chung.. B2: Trả về thể hiện dùng chung chung.. // Khởi tạo NULL. Cookies* Cookies::m_cookies Cookies::m_cookies = NULL; Cookies* Cookies::getCookies Cookies::getCookies() () { if ((m_cookies m_cookies == NULL) m_cookies = new Cookies(); return m_cookies m_cookies;; } Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt 5
- Mẫu Singleton Các vấn đề xung quanh quanh:: Chia sẻ đa luồng (multi (multi--threading): Vấn đề truy xuất đồng thời trên Cookies:: Cookies::getCookies getCookies(). (). Cookies* Cookies::getCookies() { if (m_cookies == NULL) Vùng không an toàn m_cookies = new Cookies(); Critical Section!! return m_cookies; } Cách giải quyết quyết:: Dùng Mutex Mutex.. Dùng Semaphore. Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt 6
- Mẫu Singleton Các vấn đề xung quanh quanh:: Chia sẻ đa luồng (multi (multi--threading): Dùng Mutex trong Visual C++: class Cookies Mutex* Cookies:: Mutex* Cookies::m_mutex m_mutex = new Mutex Mutex(); (); { Cookies* Cookies::m_cookies Cookies::m_cookies = NULL; private: static Mutex * m_mutex m_mutex;; Cookies* Cookies::getCookies Cookies::getCookies()() static Cookies* m_cookies m_cookies;; { Cookies(); mutex-->WaitOne mutex WaitOne(); (); public: if ((m_cookies m_cookies == NULL) static Cookies* getCookies getCookies(); (); m_cookies = new Cookies(); }; mutex-->ReleaseMutex mutex ReleaseMutex(); (); return m_cookies m_cookies;; } Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt 7
- Mẫu Singleton Các vấn đề xung quanh quanh:: Chia sẻ đa luồng (multi (multi--threading): Dùng synchronized trong Java: class Cookies { private static final Cookies m_cookies m_cookies;; private Cookies() Cookies();; public static synchronized Cookies getCookies getCookies() () { if ((m_cookies m_cookies == null) m_cookies = new Cookies(); return m_cookies m_cookies;; } }; Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt 8
- Mẫu Singleton Các vấn đề xung quanh quanh:: Chia sẻ đa luồng (multi (multi--threading): Dùng inner class (Bill Pugh, University of Maryland): class Cookies { private static class CookiesHolder { public static final Cookies m_cookies = new Cookies(); } private Cookies(); public static Cookies getCookies getCookies() () { return CookiesHolder.m_cookies CookiesHolder.m_cookies;; } }; Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt 9
- Mẫu Singleton Các vấn đề xung quanh quanh:: Kiểm thử đơn vị (unit testing): Cô lập các đơn vị mã nguồn để kiểm tra tra.. Singleton tạo ra Global State trong ứng dụng dụng.. Gây khó khăn cho việc kiểm thử đơn vị. vị. Mẫu nên tránh (anti (anti--pattern): Tạo liên kết chồng chéo trong mã nguồn nguồn.. Liên kết chồng chéo bị che dấu dấu.. Không an toàn trong ứng dụng đa luồng luồng.. Tạo Global State làm kiểm thử khó khăn khăn.. Dùng Singleton một cách cẩn trọng trọng!! !! Mẫu thiết kế hướng đối tượng & ứng dụng - Nguyễn Minh Huy CuuDuongThanCong.com https://fb.com/tailieudientucntt 10
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Thiết kế phần mềm - PGS.TS. Huỳnh Xuân Hiệp
299 p | 162 | 26
-
Bài giảng môn Thiết kế web - Phần 4: MacroMedia Dreamweaver
58 p | 124 | 17
-
Bài giảng Lập trình hướng đối tượng - Msc. Tran Son Hai
418 p | 52 | 7
-
Bài giảng Các mẫu thiết kế hướng đối tượng: Chương 5 - TS. Nguyễn Văn Hiệp
68 p | 63 | 7
-
Bài giảng Các mẫu thiết kế hướng đối tượng: Chương 1 - TS. Nguyễn Văn Hiệp
46 p | 71 | 5
-
Bài giảng Các mẫu thiết kế hướng đối tượng: Chương 8 - TS. Nguyễn Văn Hiệp
43 p | 60 | 4
-
Bài giảng Các mẫu thiết kế hướng đối tượng: Chương 7 - TS. Nguyễn Văn Hiệp
30 p | 52 | 4
-
Bài giảng Các mẫu thiết kế hướng đối tượng: Chương 6 - TS. Nguyễn Văn Hiệp
62 p | 63 | 4
-
Bài giảng Các mẫu thiết kế hướng đối tượng: Chương 4 - TS. Nguyễn Văn Hiệp
21 p | 54 | 4
-
Bài giảng Các mẫu thiết kế hướng đối tượng: Chương 3 - TS. Nguyễn Văn Hiệp
24 p | 54 | 4
-
Bài giảng Các mẫu thiết kế hướng đối tượng: Chương 2 - TS. Nguyễn Văn Hiệp
28 p | 59 | 4
-
Bài giảng Mẫu thiết kế hướng đối tượng và ứng dụng: Tổng quan về mẫu thiết kế hướng đối tượng - Nguyễn Minh Huy
14 p | 48 | 3
-
Bài giảng Mẫu thiết kế hướng đối tượng và ứng dụng: Mẫu Strategy - Nguyễn Minh Huy
10 p | 26 | 3
-
Bài giảng Mẫu thiết kế hướng đối tượng và ứng dụng: Mẫu template method - Nguyễn Minh Huy
8 p | 43 | 3
-
Bài giảng Mẫu thiết kế hướng đối tượng và ứng dụng: Nhóm mẫu khởi tạo - Nguyễn Minh Huy
3 p | 25 | 2
-
Bài giảng Mẫu thiết kế hướng đối tượng và ứng dụng: Nhóm mẫu cấu trúc - Nguyễn Minh Huy
4 p | 35 | 2
-
Bài giảng Mẫu thiết kế hướng đối tượng và ứng dụng: Nhóm mẫu hành xử - Nguyễn Minh Huy
3 p | 56 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn