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

10 46 0
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

Đang tải... (xem toàn văn)

Thông tin tài liệu

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.

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 Mẫu Singleton Ngữ cảnh cảnh:: Bài toán toán:: Đối tượng Application ứng dụng dụng Đối tượng Cookies Web Server Connection Pool Mục tiêu tiêu:: Một lớp cần có MỘT thể (instance) Mở rộng: rộng: lớp cần có xác định N thể hiện Các thể chỉa sẻ 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 Mẫu Singleton Hướng tiếp cận cận:: Chia sẻ thể lớp tồn ứng dụng dụng:: Dùng thuộc tính static để lưu thể lớp lớp Đảm bảo lớp có MỘT thể hiện: hiện: Đưa constructor vào tầm vực private Cung cấp hàm static để trả thể lưu lưu Điều khiển 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 Mẫu Singleton Cài đặt đặt:: class Cookies { private: static Cookies* m_cookies m_cookies;; Cookies();; Cookies() public: static Cookies* getCookies getCookies() () { return m_cookies m_cookies;; } }; void main main() () { Cookies *c1 = Cookies Cookies.getCookies getCookies() ();; // Thêm cookies // Bớt cookies Cookies *c2 = Cookies Cookies.getCookies getCookies() ();; // Thêm bớt cookies } // Khởi tạo thể 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 Mẫu Singleton Các vấn đề xung quanh quanh:: Khởi tạo trễ (lazy loading): Thuộc tính static khởi tạo truy xuất lớp lần đầu đầu Sử dụng nhớ không hiệu quả Cách thức khởi tạo trễ trễ:: B1: Nếu chưa khởi tạo Khởi thể dùng chung chung B2: Trả thể 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 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 Cookies:: Cookies::getCookies getCookies() () Cookies* Cookies::getCookies() { if (m_cookies == NULL) m_cookies = new Cookies(); Vùng không an toàn Critical Section!! return m_cookies; } Cách giải 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 Mẫu Singleton Các vấn đề xung quanh quanh:: Chia sẻ đa luồng (multi (multi threading): Dùng Mutex Visual C++: class Cookies { private: static Mutex * m_mutex m_mutex;; static Cookies* m_cookies m_cookies;; Cookies(); public: static Cookies* getCookies getCookies(); (); }; Mutex* Cookies:: Mutex* Cookies::m_mutex m_mutex = new Mutex Mutex(); (); Cookies* Cookies::m_cookies Cookies::m_cookies = NULL; Cookies* Cookies::getCookies Cookies::getCookies() () { mutex >WaitOne mutex WaitOne(); (); if ((m_cookies m_cookies == NULL) 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 Mẫu Singleton Các vấn đề xung quanh quanh:: Chia sẻ đa luồng (multi (multi threading): Dùng synchronized 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 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 Mẫu Singleton Các vấn đề xung quanh quanh:: Kiểm thử đơn vị (unit testing): Cô lập đơn vị mã nguồn để kiểm tra tra Singleton tạo Global State ứ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 mã nguồn nguồn Liên kết chồng chéo bị che dấu dấu Khơng an tồn ứ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 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 ... ứ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 Mẫu Singleton Hướng tiếp cận cận:: Chia sẻ thể lớp tồn ứng dụng dụng:: ... hiện: Đưa constructor vào tầm vực private Cung cấp hàm static để trả thể lưu lưu Điều khiển 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... 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 Mẫu Singleton Các vấn đề xung quanh quanh::

Ngày đăng: 11/01/2020, 20:10

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan