Bài giảng Các mẫu thiết kế hướng đối tượng - Chương 7: Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng bao gồm các nội dung: Tổng quát về nhóm mẫu “Creational”, mẫu Abstract Factory, mẫu Factory Method, mẫu Prototype,... Mời các bạn cùng tham khảo.
Chương Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng (Creational Patterns) 7.1 Tổng quát nhóm mẫu “Creational” 7.2 Mẫu Abstract Factory 7.3 Mẫu Factory Method 7.4 Mẫu Prototype 7.5 Mẫu Builder 7.6 Mẫu Singleton 7.7 Kết chương Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb.com/tailieudientucntt 7.1 Tổng quát nhóm mẫu “Creational” Đối tượng thường chứa nhiều thuộc tính liệu nhiều tham khảo ₫ến ₫ối tượng khác Đoạn code khởi tạo giá trị cho thuộc tính tham khảo phụ thuộc hoàn toàn vào thực cụ thể ₫ối tượng Chúng ta cần tách ₫oạn code khỏi code client sử dụng ₫ối tượng Thường client muốn tạo ₫ối tượng phức hợp mà không cần quan tâm ₫ến thông tin cụ thể chi tiết sau : Đối tượng phức hợp thuộc class cụ thể Nó chứa loại ₫ối tượng nào, số lượng Mối quan hệ ₫ối tượng Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb.com/tailieudientucntt 7.1 Tổng quát nhóm mẫu “Creational” Các mẫu thiết kế “Creational” giúp code client linh ₫ộng mặt khởi tạo, quản lý sử dụng ₫ối tượng Chúng cho phép client chủ ₫ộng việc xác ₫ịnh ₫ối tượng ₫ược tạo ra, tạo ₫ối tượng ₫ó, cách thức thời ₫iểm khởi tạo ₫ối tượng ₫ó Đặc ₫iểm bật mẫu thiết kế “creational” ₫oạn code client cần sử dụng ₫ối tượng không trực tiếp sinh ₫ối tượng mà nhờ phần tử trung gian ₫ể tăng ₫ộ linh ₫ộng, tối thiểu hóa phụ thuộc vào class ₫ối tượng cụ thể Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb.com/tailieudientucntt 7.2 Mẫu Abstract Factory Mục tiêu : Cung cấp cho Client interface gồm tập tác vụ khởi tạo ₫ối tượng ₫ược dùng Client che dấu chi tiết ₫ối tượng ₫ược tạo ra, thí dụ thuộc class cụ thể nào… Một mục tiêu việc viết code ứng dụng phải có tính tổng quát cao ₫ộ ₫ộc lập cao với chi tiết thực ₫ối tượng mà dùng Một phương án ₫ể ₫ạt ₫ược mục tiêu không dùng lệnh new ₫ể tạo ₫ối tượng cần dùng dùng lệnh new phải xác ₫ịnh tên class cụ thể phụ thuộc vào class Mẫu AbstractFactory giúp tạo ₫ối tượng mà không cần biết tên class cụ thể ₫ược dùng Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb.com/tailieudientucntt 7.2 Mẫu Abstract Factory Thí dụ việc dùng mẫu Abstract factory : Ta muốn viết chương trình GUI (dùng giao diện ₫ồ họa trực quan) có khả chạy nhiều platform khác (chương trình multi-platform) Mỗi platform có họ class miêu tả ₫ối tượng giao diện phổ dụng TextBox, Button,… Giả sử ₫ối tượng giao diện chức platform khác hỗ trợ interface thống (nếu không ta dùng mẫu Adapter ₫ể có ₫ược kết này) Việc sử dụng cụ thể họ class giao diện biết chương trình bắt ₫ầu chạy Để giải vấn ₫ề trên, cách tốt dùng mẫu AbstractFactory với lược ₫ồ class sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb.com/tailieudientucntt 7.2 Mẫu Abstract Factory Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb.com/tailieudientucntt 7.2 Mẫu Abstract Factory Ta xây dựng mẫu AbstractFactory theo loại class pattern với lược ₫ồ class sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb.com/tailieudientucntt 7.2 Mẫu Abstract Factory Các phần tử tham gia : IObjectA, IObjectB : interface thống ₫ối tượng chức họ khác IAbstractFactory : interface ₫ối tượng chuyên tạo ₫ối tượng dùm cho Client ConcreteFactory1… : class thực tác vụ tạo ₫ối tượng interface IAbstractFactory Hệ thống có nhiều ConcreteFactory, ConcreteFactory sinh ₫ối tượng họ, họ ₫ối tượng ConcreteFactory tạo tương ₫ồng vai trò, chức Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb.com/tailieudientucntt 7.2 Mẫu Abstract Factory Các phần tử tham gia (tt) : ObjectA, ObjectB : class thực ₫ối tượng ₫ược tạo class ConcreteFactory tương ứng, hỗ trợ interface sử dụng tương ứng Client : ₫oạn code cần tạo sử dụng ₫ối tượng Client sử dụng interface IAbstractFactory, IObjectA, IObjectB,… hoàn toàn ₫ộc lập với class cụ thể mà dùng Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb.com/tailieudientucntt 7.2 Mẫu Abstract Factory Quá trình tương tác phần tử : Tại thời ₫iểm dịch, Client có biến tham khảo ₫ến ₫ối tượng IAbstractFactory (giả sử tên factory) Tại thời ₫iểm run-time, dựa vào ngữ cảnh, Client biết cần sử dụng họ ₫ối tượng tạo ₫ối tượng ConcreteFactory tương ứng gán tham khảo vào biến factory Sau ₫ó giải thuật, lần tạo ₫ối tượng cần dùng, thông qua biến factory, Client gởi thông ₫iệp ₫ể yêu cầu ConcreteFactory tạo ₫ối tượng mong muốn Client dựa vào interface ₫ối tượng ₫ược tạo ₫ể sử dụng ₫ối tượng Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 10 https://fb.com/tailieudientucntt 7.4 Mẫu Prototype Mục tiêu : Tạo ₫ối tượng có nội dung y ₫ối tượng ₫ã có sẵn Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 16 https://fb.com/tailieudientucntt 7.4 Mẫu Prototype Thí dụ việc dùng mẫu Prototype : Có nhiều ta muốn tạo ₫ối tượng có cấu trúc nội dung cụ thể giống y ₫ội tượng ₫ã có sẵn Cách tốt dùng mẫu Prototype, ₫ối tượng có sẵn ₫ược gọi Prototype phải chứa tác vụ Clone() có nhiệm vụ trả tham khảo ₫ến ₫ối tượng có cấu trúc nội dung giống như (₫ối tượng ₫ó mình) Thường dùng phát biểu gán ₫ối tượng theo nghĩa giống lệnh gán liệu cổ ₫iển : int i1 = 5; Int i2 = i1; //i2 = I1 = 0; //i2 =5 Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com C1 c1 = new C1(); //có c1.i = 0; c1.i = 5; C1 c2 = c1.Clone(); //c2.i = 5; c1.i = 0; //c2.i =5 Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 17 https://fb.com/tailieudientucntt 7.4 Mẫu Prototype prototype Client Prototype Clone() Operation() p = protoype.Clone(); ConcretePrototype1 ConcretePrototype2 Clone() Clone() return copy of self; Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com return copy of shelf; Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 18 https://fb.com/tailieudientucntt 7.4 Mẫu Prototype Các phần tử tham gia : Prototype : interface miêu tả tác vụ ₫ối tượng phức hợp cần dùng Client, ₫ó cần có tác vụ Clone() với chức tạo ₫ối tượng có cầu trúc nội dung giống hệt ConcretePrototype1,… : class thực tác vụ class cha Prototype theo cách riêng Client : class miêu tả ₫oạn code tạo sử dụng ₫ối tượng ConcretePrototype1, ConcretePrototype2 Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 19 https://fb.com/tailieudientucntt 7.5 Mẫu Builder Mục tiêu : Giúp Client khởi tạo ₫ối tượng phức hợp (bao gộp) theo chế tích lũy tăng dần thơng qua nhiều lần gọi dịch vụ ₫ối tượng Builder Client không cần biết thông tin thực ₫ối tượng ₫ó Cụ thể Client khơng cần biết ₫ối tượng ₫ược tạo thuộc class nào, có cấu trúc cụ thể nào, ₫ối tượng thành phần thuộc class cụ thể nào… Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 20 https://fb.com/tailieudientucntt 7.5 Mẫu Builder Thí dụ việc dùng mẫu Builder : Ta muốn viết chương trình RTFTranslate có chức ₫ọc file tài liệu theo ₫ịnh dạng RTF chuyển nội dung gốc thành ₫ịnh dạng xác ₫ịnh ₫ó, thí dụ chuỗi văn thô mã ASCII, hay ₫ịnh dạng tài liệu khoa học TeX, hay ₫ịnh dạng MSWord,… Cho dù cần chuyển ₫ịnh dạng (biết trước hay chưa biết trước), ta muốn ₫oạn code thực chuyển ₫ịnh dạng phải có tính tổng qt ₫ộc lập với ₫ịnh dạng ₫ích Cách tốt ₫ể giải vấn ₫ề dùng mẫu Builder với lược ₫ồ class sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 21 https://fb.com/tailieudientucntt 7.5 Mẫu Builder Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 22 https://fb.com/tailieudientucntt 7.5 Mẫu Builder Ta xây dựng mẫu Builder theo loại class pattern với lược ₫ồ class sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 23 https://fb.com/tailieudientucntt 7.5 Mẫu Builder Các phần tử tham gia : IBuilder (IConverter) : interface thống builder khác Dicrector (RTFTranslate) : ₫oạn code Client thực giải thuật tạo phát triển ₫ối tượng phức hợp, ₫oạn code phải ₫ộc lập với chi tiết cụ thể ₫ối tượng phức hợp ₫ược tạo Director sử dụng ₫ối tượng phức hợp thông qua interface thống IComplexObject ConcreteBuilder1… (ASCIIConverter…) : class ₫ặc tả builder cụ thể, builder tạo phát triển ₫ối tượng phức hợp theo cấu trúc riêng quản lý Nó cung cấp tác vụ getResult() ₫ể trả tham khảo ₫ến ₫ối tượng phức hợp sau xây dựng xong, ₫ối tượng phức hợp phải thực interface IComplexObject Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 24 https://fb.com/tailieudientucntt 7.5 Mẫu Builder Các phần tử tham gia : IComplexObject (IResult) : interface thống ₫ối tượng phức hợp mà builder khác tạo ComplexObject1… (ASCIIString…) : class ₫ặc tả ₫ối tượng phức hợp cụ thể builder cụ thể tạo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 25 https://fb.com/tailieudientucntt 7.6 Mẫu Singleton Mục tiêu : Đảm bảo tạo instance class chức xác ₫ịnh cấp phát tham khảo ₫ến ₫ối tượng cho client ₫ể chúng dùng chung Thực tế nhiều hoạt ₫ộng hệ thống, ₫ể ₫ảm bảo tính quán ₫úng ₫ắn việc sử dụng tài nguyên hệ thống, ta phải ₫ảm bảo tạo ₫ối tượng quản lý tài ngun ₫ó Thí dụ ₫ể quản lý việc in ấn phần mềm máy in ₫ược ₫úng ₫ắn quán, ta ₫ược tạo ₫ối tượng "printer spooler" ₫ể quản lý máy in tương ứng Để quản lý việc truy xuất file thiết bị chứa tin máy, ta ₫ược tạo ₫ối tượng quản lý hệ thống file Để quản lý cửa sổ ứng dụng, ta ₫ược tạo ₫ối tượng quản lý windows nhất… Để giải vấn ₫ề trên, cách tốt dùng mẫu Singleton Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 26 https://fb.com/tailieudientucntt 7.6 Mẫu Singleton Thí dụ việc dùng mẫu Builder : Sau ₫ây lược ₫ồ class mẫu Singleton giải việc in ấn ứng dụng máy in xác ₫ịnh Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 27 https://fb.com/tailieudientucntt 7.6 Mẫu Singleton Ta xây dựng mẫu Singleton theo loại class pattern với lược ₫ồ class sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 28 https://fb.com/tailieudientucntt 7.6 Mẫu Singleton Các phần tử tham gia : Singleton (PrintSpooler) : chịu trách nhiệm việc tạo instance cho class Singleton, trả tham khảo ₫ến ₫ối tượng có yêu cầu không cho phép client tạo thêm ₫ối tượng Singleton khác Application : cần dùng ₫ối tượng Singleton, gọi tác vụ getInstance() class Singleton dùng tham khảo ₫ể truy xuất dịch vụ ₫ối tượng Nó khơng thể dùng lệnh new ₫ể tạo ₫ối tượng Singleton khác Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 29 https://fb.com/tailieudientucntt 7.7 Kết chương Chương ₫ã giới thiệu thơng tin nhóm mẫu phục vụ khởi tạo ₫ối tượng phức hợp thông tin chi tiết cụ thể mẫu Asbtract Factory, Factory Method, Prototype, Builder, Singleton Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 30 https://fb.com/tailieudientucntt ... https://fb.com/tailieudientucntt 7. 5 Mẫu Builder Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Môn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi... dùng mẫu Builder với lược ₫ồ class sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế. .. Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Các mẫu thiết kế hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb.com/tailieudientucntt 7. 2 Mẫu