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
Tổng quát về nhóm mẩu “Creational”
□ Đối tượng thường chứa nhiều thuộc tính dữ liệu và nhiều tham khảo đến các đối tượng khác. Đoạn code khỏi tạo giá trị cho các thuộc tính và tham khảo này phụ thuộc hoàn toàn vào sự hiện thực cụ thể cùa đối tượng. Chúng ta cần tách đoạn code này khỏi code của 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 các thông tin cụ thể chi tiết sau :
■ Đối tượng phức hợp thuộc class cụ thể nào.
■ Nó chúa các loại đối tuợng con nào, số lượng ra sao.
■ Mối quan hệ giữa các đối tượng con như thế nào.
Tổng quát về nhóm mẩu “Creational”
□ Các mẫu thiết kế “Creational” sẽ giúp code Client linh động về mặt khởi tạo, quản lý và sứ dụng đối tượng. Chúng có thể cho phép Client chú động trong việc xác định đối tượng nào được tạo ra, ai tạo ra đối tưọng đó, cách thức và thời điểm khởi tạo đối tượng đó.
□ Đặc điểm nổi bật cùa các mẫu thiết kế “creational” là đoạn code client cần sử dụng đối tượng không trực tiếp sinh ra đối tượng mà nhờ các phần tứ trung gian để tăng độ linh động, tối thiểu hóa sự phụ thuộc vào các class đối tượng cụ thể.
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: 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
ng ₫ược dùng trong Client nhưng che dấu mọi chi tiết về ₫ối tượng ₫ược tạo ra, thí dụ như thuộc class cụ thể nào . Một trong các mục tiêu của việc viết code ứng dụng là phải có tính tổng quát cao và ₫ộ ₫ộc lập cao với chi tiết hiện thực của các ₫ối tượng mà nó dùng. Một trong các phương án ₫ể ₫ạt ₫ược mục tiêu trên là không dùng lệnh new ₫ể tạo ra ₫ối tượng cần dùng vì nếu dùng lệnh new thì phải xác ₫ịnh tên class cụ thể và như vậy sẽ phụ thuộc vào class này. Mẫu AbstractFactory sẽ giúp chúng ta 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 Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 4 7.2 Mẫu Abstract Factory Thí dụ về 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ả năng chạy trên nhiều platform khác nhau (chương trình multi-platform). Mỗi platform có một họ các class miêu tả các ₫ối tượng giao diện phổ dụng như TextBox, Button, Giả sử các ₫ối tượng giao diện cùng chức năng trên các platform khác nhau hỗ trợ cùng interface thống nhất (nếu không ta dùng mẫu Adapter ₫ể có ₫ược kết quả này). Việc sử dụng cụ thể họ các class giao diện nào chỉ biết khi chương trình bắt ₫ầu chạy. Để giải quyết vấn ₫ề trên, cách tốt nhất là dùng mẫu AbstractFactory với lược ₫ồ class như sau : Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 5 7.2 Mẫu Abstract Factory Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 6 7.2 Mẫu Abstract Factory Ta có thể xây dựng mẫu AbstractFactory theo loại class pattern với lược ₫ồ class như sau : Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 7 7.2 Mẫu Abstract Factory Các phần tử tham gia : . IObjectA, IObjectB : interface thống nhất của các ₫ối tượng cùng chức năng trong các họ khác nhau. . IAbstractFactory : interface của ₫ối tượng chuyên tạo các ₫ối tượng dùm cho Client. . ConcreteFactory1 : class hiện thực các tác vụ tạo ₫ối tượng trong interface IAbstractFactory. Hệ thống có nhiều ConcreteFactory, mỗi ConcreteFactory sinh ra các ₫ối tượng cùng họ, các họ ₫ối tượng do các ConcreteFactory tạo ra tương ₫ồng nhau về vai trò, về chức năng. Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 8 7.2 Mẫu Abstract Factory Các phần tử tham gia (tt) : . ObjectA, ObjectB : class hiện thực ₫ối tượng ₫ược tạo ra bởi class ConcreteFactory tương ứng, nó hỗ trợ interface sử dụng tương ứng. . Client : ₫oạn code cần tạo và sử dụng các ₫ối tượng. Client chỉ sử dụng các interface IAbstractFactory, IObjectA, IObjectB, và như thế hoàn toàn ₫ộc lập với các class cụ thể mà nó sẽ dùng. Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 9 7.2 Mẫu Abstract Factory Quá trình tương tác giữa cá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 là factory). . Tại thời ₫iểm run-time, dựa vào ngữ cảnh, Client sẽ biết cần sử dụng họ ₫ối tượng nào và nó sẽ tạo ₫ối tượng ConcreteFactory tương ứng rồi gán tham khảo vào biến factory. Sau ₫ó trong giải thuật, mỗi lần tạo ₫ối tượng cần dùng, thông qua biến factory, Client sẽ gởi thông ₫iệp ₫ể yêu cầu ConcreteFactory tạo ra ₫ối tượng mong muốn. . Client dựa vào interface của ₫ối tượng ₫ược tạo ra ₫ể sử dụng ₫ối tượng này. Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 10 7.3 Mẫu Factory Method Mục tiêu : . Client ₫ịnh nghĩa interface các tác vụ khởi tạo ₫ối tượng phức hợp cần dùng rồi sử dụng các tác vụ này trong ₫oạn code của mình, nhưng không hiện thực cụ thể các tác vụ khởi tạo ₫ối tượng mà ₫ể class con của mình override và hiện thực theo yêu cầu riêng của từng class con. Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 11 7.3 Mẫu Factory Method Thí dụ về việc dùng mẫu Factory method : . Các ứng dụng trong bộ MS Office như Word, Excel, PowerPoint ₫ều có cơ chế khởi tạo, xử lý tài liệu giống nhau cho dù cấu trúc vật lý của các tài liệu trong các ứng dụng là khác nhau. Để viết ₫oạn code xử lý tài liệu trong các ứng dụng MS Office nhất quán, ₫ộc lập với tài liệu cụ thể, Microsoft ₫ã dùng mẫu Factory Method như sau ₫ể thiết kế các ứng dụng MS Office : Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 12 7.3 Mẫu Factory Method docs IDocument Application Open() CreateDocument() Document* doc=CreateDocument(); Close() NewDocument() docs.Add(doc); Save() OpenDocument() doc->Open(); Revert() MyDocument MyApplication CreateDocument() return new MyDocument; Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 13 7.3 Mẫu Factory Method Ta có thể xây dựng mẫu Factory Method theo loại class pattern với lược ₫ồ class như sau : docs IProduct Creator FactoryMethod() ... AnOperation() Product = FactoryMethod(); ... ConcreteProduct ConcreteCreator FactoryMethod() return new ConcreteProduct; Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 14 7.3 Mẫu Factory Method Các phần tử tham gia : . Creator (Application) : class chứa code client cần tạo và sử dụng ₫ối tượng phức hợp, nó sẽ chứa ₫ặc tả các tác vụ khởi tạo ₫ối tượng phức hợp cần dùng. . ConcreteCreator (MyApplication) : class hiện thực các tác vụ tạo ₫ối tượng trong class cha Creator. . IProduct (IDocument) : interface của ₫ối tượng phức hợp cần tạo và sử dụng. . ConcreteProduct (MyDocument) : class miêu tả ₫ối tượng phức hợp cụ thể cần tạo và sử dụng. Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 15 7.4 Mẫu Prototype Mục tiêu : . Tạo ₫ối tượng mới có nội dung y như ₫ối tượng ₫ã có sẵn. Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 16 7.4 Mẫu Prototype Thí dụ về việc dùng mẫu Prototype : . Có nhiều khi ta muốn tạo ₫ối tượng mới có cấu trúc và nội dung cụ thể giống y như một ₫ội tượng ₫ã có sẵn. Cách tốt nhất là dùng mẫu Prototype, ₫ối tượng có sẵn ₫ược gọi là Prototype và phải chứa ít nhất tác vụ Clone() có nhiệm vụ trả về tham khảo ₫ến ₫ối tượng có cấu trúc và nội dung giống như như mình (₫ối tượng ₫ó có thể chính là mình). . Thường dùng trong các phát biểu gán ₫ối tượng nhưng theo nghĩa giống như lệnh gán dữ liệu cổ ₫iển : int i1 = 5; C1 c1 = new C1(); //có c1.i = 0; Int i2 = i1; //i2 = 5 c1.i = 5; I1 = 0; //i2 vẫn =5 C1 c2 = c1.Clone(); //c2.i sẽ = 5; c1.i = 0; //c2.i vẫn =5 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 17 7.4 Mẫu Prototype prototype Client Prototype Operation() Clone() ConcretePrototype1 ConcretePrototype2 p = protoype.Clone(); Clone() Clone() return copy of self; return copy of shelf; Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 18 7.4 Mẫu Prototype Các phần tử tham gia : . Prototype : interface miêu tả các tác vụ của ₫ối tượng phức hợp cần dùng bởi Client, trong ₫ó cần có tác vụ Clone() với chức năng tạo ra ₫ối tượng có cầu trúc và nội dung giống hệt mình. . ConcretePrototype1, : class hiện thực các tác vụ trong class cha Prototype theo cách riêng của mình. . Client : class miêu tả ₫oạn code tạo và sử dụng các ₫ối tượng ConcretePrototype1, ConcretePrototype2... Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 19 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 cơ chế tích lũy tăng dần thông qua nhiều lần gọi dịch vụ của ₫ối tượng Builder. . Client không cần biết các thông tin hiện thực của ₫ối tượng ₫ó. Cụ thể Client không cần biết ₫ối tượng ₫ược tạo ra thuộc class nào, có cấu trúc cụ thể nào, các ₫ố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 Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 20 7.5 Mẫu Builder Thí dụ về việc dùng mẫu Builder : . Ta muốn viết chương trình RTFTranslate có chức năng ₫ọc file tài liệu theo ₫ịnh dạng RTF rồi chuyển nội dung gốc thành 1 ₫ịnh dạng xác ₫ịnh nào ₫ó, thí dụ như chuỗi văn bả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 về ₫ịnh dạng nào (biết trước hay chưa biết trước), ta muốn ₫oạn code thực hiện chuyển ₫ịnh dạng phải có tính tổng quát và ₫ộc lập với ₫ịnh dạng ₫ích. . Cách tốt nhất ₫ể giải quyết vấn ₫ề trên là dùng mẫu Builder với lược ₫ồ class như sau : Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 21 7.5 Mẫu Builder Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 22 7.5 Mẫu Builder Ta có thể xây dựng mẫu Builder theo loại class pattern với lược ₫ồ class như sau : Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 23 7.5 Mẫu Builder Các phần tử tham gia : . IBuilder (IConverter) : interface thống nhất của các builder khác nhau. . Dicrector (RTFTranslate) : ₫oạn code Client thực hiện giải thuật tạo và phát triển ₫ối tượng phức hợp, ₫oạn code này phải ₫ộc lập với chi tiết cụ thể về ₫ối tượng phức hợp ₫ược tạo ra. Director chỉ sử dụng ₫ối tượng phức hợp thông qua interface thống nhất IComplexObject. . ConcreteBuilder1 (ASCIIConverter) : class ₫ặc tả 1 builder cụ thể, builder này sẽ tạo và phát triển ₫ối tượng phức hợp theo cấu trúc riêng do nó quản lý. Nó cũng cung cấp tác vụ getResult() ₫ể trả về tham khảo ₫ến ₫ối tượng phức hợp sau khi xây dựng xong, ₫ối tượng phức hợp này phải hiện thực interface IComplexObject. Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 24 7.5 Mẫu Builder Các phần tử tham gia : . IComplexObject (IResult) : interface thống nhất của các ₫ối tượng phức hợp mà các builder khác nhau tạo ra. . ComplexObject1 (ASCIIString) : class ₫ặc tả 1 ₫ối tượng phức hợp cụ thể do 1 builder cụ thể tạo ra. Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 25 7.6 Mẫu Singleton Mục tiêu : . Đảm bảo chỉ có thể tạo ra 1 instance duy nhất của 1 class chức năng xác ₫ịnh và cấp phát tham khảo ₫ến ₫ối tượng duy nhất này cho các client ₫ể chúng dùng chung. . Thực tế trong nhiều hoạt ₫ộng của hệ thống, ₫ể ₫ảm bảo tính nhất quán và ₫úng ₫ắn trong việc sử dụng tài nguyên của hệ thống, ta phải ₫ảm bảo chỉ có thể tạo ra 1 ₫ối tượng quản lý tài nguyên ₫ó. Thí dụ ₫ể quản lý việc in ấn của các phần mềm ra 1 máy in ₫ược ₫úng ₫ắn và nhất quán, ta chỉ ₫ược tạo 1 ₫ối tượng "printer spooler" ₫ể quản lý máy in tương ứng. Để quản lý việc truy xuất các file trên thiết bị chứa tin của máy, ta chỉ ₫ược tạo ra 1 ₫ối tượng quản lý hệ thống file duy nhất. Để quản lý các cửa sổ ứng dụng, ta chỉ ₫ược tạo ra 1 ₫ối tượng quản lý windows duy nhất . Để giải quyết các vấn ₫ề trên, cách tốt nhất là dùng mẫu Singleton Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 26 7.6 Mẫu Singleton Thí dụ về việc dùng mẫu Builder : . Sau ₫ây là lược ₫ồ class của mẫu Singleton giải quyết việc in ấn của các ứng dụng trên 1 máy in xác ₫ịnh. Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 27 7.6 Mẫu Singleton Ta có thể xây dựng mẫu Singleton theo loại class pattern với lược ₫ồ class như sau : Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 28 7.6 Mẫu Singleton Các phần tử tham gia : . Singleton (PrintSpooler) : chịu trách nhiệm về việc tạo instance duy nhất cho class Singleton, trả về tham khảo ₫ến ₫ối tượng duy nhất này khi có yêu cầu và không cho phép client tạo thêm ₫ối tượng Singleton khác. . Application : khi cần dùng ₫ối tượng Singleton, nó gọi tác vụ getInstance() của class Singleton rồi dùng tham khảo này ₫ể truy xuất dịch vụ của ₫ố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 Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 29 7.7 Kết chương Chương này ₫ã giới thiệu các thông tin cơ bản về nhóm mẫu phục vụ khởi tạo ₫ối tượng phức hợp và thông tin chi tiết cụ thể về các mẫu Asbtract Factory, Factory Method, Prototype, Builder, Singleton. Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 7 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng © 2010 Slide 30
File đính kèm:
- bai_giang_cac_mau_thiet_ke_huong_doi_tuong_chuong_7_cac_mau.pdf