1. Trang chủ
  2. » Công Nghệ Thông Tin

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 47 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 320,95 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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.

Trang 1

GV

GV NguyễnNguyễn Minh Minh HuyHuy

Mẫu

Trang 2

 Ngữ Ngữ cảnh cảnh::

 Bài Bài toán toán::

 ĐốiĐối tượngtượng Application Application trongtrong ứngứng dụngdụng

 ĐốiĐối tượngtượng Cookies Cookies trêntrên Web Server.Web Server

 Connection Pool

 Mục Mục tiêu tiêu::

 Mục Mục tiêu tiêu::

 MộtMột lớplớp chỉchỉ cầncần cócó MỘT MỘT thểthể hiệnhiện (instance).(instance)



 MởMở rộngrộng: : mộtmột lớplớp chỉchỉ cầncần cócó xácxác địnhđịnh N N thểthể hiệnhiện

 CácCác thểthể hiệnhiện nàynày đượcđược chỉachỉa sẻsẻ trêntrên toàntoàn ứngứng dụngdụng

Trang 3

 Hướng Hướng tiếp tiếp cận cận::

 Chia Chia sẻ sẻ thể thể hiện hiện của của lớp lớp trên trên toàn toàn ứng ứng dụng dụng::

 DùngDùng thuộcthuộc tínhtính static static đểđể lưulưu mộtmột thểthể hiệnhiện củacủa lớplớp

 Đảm Đảm bảo bảo lớp lớp chỉ chỉ có có MỘT MỘT thể thể hiện hiện::

 ĐưaĐưa constructor constructor vàovào tầmtầm vựcvực private.private

Cung Cung cấpcấp hàmhàm static static đểđể trảtrả vềvề thểthể hiệnhiện đãđã lưulưu

 CungCung cấpcấp hàmhàm static static đểđể trảtrả vềvề thểthể hiệnhiện đãđã lưulưu



 ĐiềuĐiều khiểnkhiển đượcđược quáquá trìnhtrình khởikhởi tạotạo đốiđối tượngtượng

Trang 4

 Cài Cài đặt đặt::

class

class Cookies Cookies

{{

private:

static static Cookies* Cookies* m_cookies m_cookies;;

Cookies()

Cookies();;

public:

static getCookies getCookies() ()

void

void main main()() {{

Cookies *c1 =

Cookies *c1 = Cookies.Cookies.getCookies getCookies() ();;

//

// Thêm Thêm cookiesX cookiesX //

// Bớt Bớt cookiesX cookiesX Cookies *c2 = Cookies *c2 = Cookies.Cookies.getCookies getCookies() ();; static

static Cookies* Cookies* getCookies getCookies() ()

{{

return return m_cookies m_cookies;;

}}

};

//

// Khởi Khởi tạo tạo thể thể hiện hiện dùng dùng chung chung

Cookies* Cookies::

Cookies* Cookies::m_cookies m_cookies = new Cookies();= new Cookies();

Cookies *c2 =

Cookies *c2 = Cookies.Cookies.getCookies getCookies() ();;

//

// Thêm Thêm bớt bớt cookiesX cookiesX }}

Trang 5

 Các Các vấn vấn đề đề xung xung quanh quanh::

 Khởi Khởi tạo tạo trễ trễ (lazy loading): (lazy loading):

 ThuộcThuộc tínhtính static static đượcđược khởikhởi tạotạo khikhi truytruy xuấtxuất lớplớp lầnlần đầuđầu



 SửSử dụngdụng bộbộ nhớnhớ khôngkhông hiệuhiệu quảquả

 CáchCách thứcthức khởikhởi tạotạo trễtrễ::

 B1: B1: Nếu Nếu chưa chưa khởi khởi tạo tạo   Khởi Khởi thể thể hiện hiện dùng dùng chung chung

 B1: B1: Nếu Nếu chưa chưa khởi khởi tạo tạo   Khởi Khởi thể thể hiện hiện dùng dùng chung chung

 B2: B2: Trả Trả về về thể thể hiện hiện dùng dùng chung chung

//

// Khởi Khởi tạo tạo NULL NULL.

Cookies* Cookies::

Cookies* Cookies::m_cookies m_cookies = NULL;= NULL;

Cookies* Cookies::

Cookies* Cookies::getCookies getCookies() ()

{{

if (

if (m_cookies m_cookies == NULL) == NULL)

m_cookies m_cookies = new Cookies(); = new Cookies();

Trang 6

 Các Các vấn vấn đề đề xung xung quanh quanh::

 Chia Chia sẻ sẻ đa đa luồng luồng (multi (multi threading): threading):

 VấnVấn đềđề truytruy xuấtxuất đồngđồng thờithời trêntrên Cookies::Cookies::getCookiesgetCookies().()

Cookies* Cookies::getCookies()

{

if (m_cookies == NULL) Vùng không an toàn

 CáchCách giảigiải quyếtquyết::

 Dùng Dùng Mutex Mutex

 Dùng Dùng Semaphore Semaphore.

if (m_cookies == NULL)

m_cookies = new Cookies();

return m_cookies;

}

Vùng không an toàn Critical Section!!

Trang 7

 Các Các vấn vấn đề đề xung xung quanh quanh::

 Chia Chia sẻ sẻ đa đa luồng luồng (multi (multi threading): threading):

 DùngDùng MutexMutex trongtrong Visual C++:Visual C++:

class

class Cookies Cookies

{{

private:

static

static Mutex Mutex * * m_mutex m_mutex;;

Mutex Mutex* Cookies::* Cookies::m_mutex m_mutex = new = new Mutex Mutex();(); Cookies* Cookies::

Cookies* Cookies::m_cookies m_cookies = NULL; = NULL;

Cookies* Cookies::

Cookies* Cookies::getCookies getCookies() ()

static

static Mutex Mutex * * m_mutex m_mutex;;

static Cookies*

static Cookies* m_cookies m_cookies;;

Cookies();

public:

static Cookies*

static Cookies* getCookies getCookies(); ();

};

Cookies* Cookies::

Cookies* Cookies::getCookies getCookies() ()

{{

mutex mutex > >WaitOne WaitOne(); ();

if (

if (m_cookies m_cookies == NULL) == NULL)

m_cookies m_cookies = new Cookies(); = new Cookies();

mutex mutex > >ReleaseMutex ReleaseMutex(); ();

return return m_cookies m_cookies;;

}}

Trang 8

 Các Các vấn vấn đề đề xung xung quanh quanh::

 Chia Chia sẻ sẻ đa đa luồng luồng (multi (multi threading): threading):

 DùngDùng synchronized synchronized trongtrong Java:Java:

class

class Cookies Cookies

{{

private

private static static final Cookies final Cookies m_cookies m_cookies;;

private

private Cookies() Cookies();;

private

private Cookies() Cookies();;

public

public static static synchronized synchronized Cookies Cookies getCookies getCookies() ()

{{

if (

if (m_cookies m_cookies == null) == null)

m_cookies

m_cookies = new Cookies(); = new Cookies();

return return m_cookies m_cookies;;

}}

};

Trang 9

 Các Các vấn vấn đề đề xung xung quanh quanh::

 Chia Chia sẻ sẻ đa đa luồng luồng (multi (multi threading): threading):

 DùngDùng inner class (Bill Pugh, University of Maryland):inner class (Bill Pugh, University of Maryland):

class

class Cookies Cookies

{{

private static class

private static class CookiesHolder CookiesHolder {{

public static public static final Cookies final Cookies m_cookies m_cookies = new Cookies();= new Cookies();

public static

public static final Cookies final Cookies m_cookies m_cookies = new Cookies();= new Cookies();

}}

private Cookies();

public static Cookies

public static Cookies getCookies getCookies() ()

{{

return

return CookiesHolder.m_cookies CookiesHolder.m_cookies;;

Trang 10

 Các Các vấn vấn đề đề xung xung quanh quanh::

 Kiểm Kiểm thử thử đơn đơn vị vị (unit testing): (unit testing):

 Cô lậpCô lập cáccác đơnđơn vịvị mãmã nguồnnguồn đểđể kiểmkiểm tratra

 Singleton Singleton tạotạo rara Global State Global State trongtrong ứngứng dụngdụng



 GâyGây khókhó khănkhăn chocho việcviệc kiểmkiểm thửthử đơnđơn vịvị

 Mẫu Mẫu nên nên tránh tránh (anti (anti pattern): pattern):

 Mẫu Mẫu nên nên tránh tránh (anti (anti pattern): pattern):

 TạoTạo liênliên kếtkết chồngchồng chéochéo trongtrong mãmã nguồnnguồn

 LiênLiên kếtkết chồngchồng chéochéo bịbị cheche dấudấu

 KhôngKhông an an toàntoàn trongtrong ứngứng dụngdụng đađa luồngluồng

 TạoTạo Global State Global State làmlàm kiểmkiểm thửthử khókhó khănkhăn



 DùngDùng Singleton Singleton mộtmột cáchcách cẩncẩn trọngtrọng!!!!

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

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm