intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: _ _ | Ngày: | Loại File: PDF | Số trang:10

44
lượt xem
3
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
4=>1