Chương 10 Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng (Creational Patterns) ne C om 10.1 Tổng quát nhóm mẫu “Creational” 10.2 Mẫu Abstract Factory 10.3 Mẫu Factory Method 10.4 Mẫu Prototype 10.5 Mẫu Builder 10.6 Mẫu Singleton 10.7 Kết chương Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Đố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 hồn tồ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 Si nh Vi 10.1 Tổng quát nhóm mẫu “Creational” Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb.com/sinhvienzonevn 10.1 Tổng quát nhóm mẫu “Creational” ne C om 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ể Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 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… Si nh Mục tiêu : Vi 10.2 Mẫu Abstract Factory 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 SinhVienZone.com Mơn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb.com/sinhvienzonevn 10.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 : ne C om Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Si nh Vi 10.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 SinhVienZone.com Mơn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb.com/sinhvienzonevn 10.2 Mẫu Abstract Factory ne C om Ta xây dựng mẫu AbstractFactory theo loại class pattern với lược ₫ồ class sau : Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 10.2 Mẫu Abstract Factory nh 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 Si Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb.com/sinhvienzonevn 10.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 ne C om Mơn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 10.2 Mẫu Abstract Factory nh 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 Si Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 10 https://fb.com/sinhvienzonevn 10.3 Mẫu Method Method Mục tiêu : Client ₫ịnh nghĩa interface tác vụ khởi tạo ₫ối tượng phức hợp cần dùng sử dụng tác vụ ₫oạn code mình, khơng thực cụ thể tác vụ khởi tạo ₫ối tượng mà ₫ể class override thực theo yêu cầu riêng class ne C om Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 11 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 10.3 Mẫu Factory Method Các ứng dụng MS Office Word, Excel, PowerPoint ₫ều có chế khởi tạo, xử lý tài liệu giống cho dù cấu trúc vật lý tài liệu ứng dụng khác Để viết ₫oạn code xử lý tài liệu ứng dụng MS Office quán, ₫ộc lập với tài liệu cụ thể, Microsoft ₫ã dùng mẫu Factory Method sau ₫ể thiết kế ứng dụng MS Office : Si nh Thí dụ việc dùng mẫu Factory method : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 12 https://fb.com/sinhvienzonevn 10.3 Mẫu Factory Method docs Application CreateDocument() NewDocument() OpenDocument() Open() Close() Save() Revert() Document* doc=CreateDocument(); docs.Add(doc); doc->Open(); om IDocument MyApplication MyDocument return new MyDocument; ne C CreateDocument() Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 13 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 10.3 Mẫu Factory Method nh Ta xây dựng mẫu Factory Method theo loại class pattern với lược ₫ồ class sau : docs Si IProduct ConcreteProduct Creator FactoryMethod() AnOperation() ConcreteCreator FactoryMethod() Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Product = FactoryMethod(); return new ConcreteProduct; Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 14 https://fb.com/sinhvienzonevn 10.3 Mẫu Factory Method Các phần tử tham gia : Creator (Application) : class chứa code client cần tạo sử dụng ₫ối tượng phức hợp, chứa ₫ặc tả tác vụ khởi tạo ₫ối tượng phức hợp cần dùng ConcreteCreator (MyApplication) : class thực tác vụ tạo ₫ối tượng class cha Creator IProduct (IDocument) : interface ₫ối tượng phức hợp cần tạo sử dụng ConcreteProduct (MyDocument) : class miêu tả ₫ối tượng phức hợp cụ thể cần tạo sử dụng ne C om Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 15 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Tạo ₫ối tượng có nội dung y ₫ối tượng ₫ã có sẵn Si nh Mục tiêu : Vi 10.4 Mẫu Prototype Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 16 https://fb.com/sinhvienzonevn 10.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 : om int i1 = 5; Int i2 = i1; //i2 = I1 = 0; //i2 =5 ne C 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 : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 17 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 prototype Prototype nh Client Vi 10.4 Mẫu Prototype Clone() Si 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 SinhVienZone.com return copy of shelf; Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 18 https://fb.com/sinhvienzonevn 10.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 ne C om Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 19 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 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 Si nh Mục tiêu : Vi 10.5 Mẫu 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 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 20 https://fb.com/sinhvienzonevn 10.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 : ne C om Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 21 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Si nh Vi 10.5 Mẫu Builder Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 22 https://fb.com/sinhvienzonevn 10.5 Mẫu Builder ne C om Ta xây dựng mẫu Builder theo loại class pattern với lược ₫ồ class sau : Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 23 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 10.5 Mẫu Builder nh 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 Si Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 24 https://fb.com/sinhvienzonevn 10.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 ne C om Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 25 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 10.6 Mẫu Singleton Si nh 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 nguyên ₫ó 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 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 26 https://fb.com/sinhvienzonevn 10.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 ne C om Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 27 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 10.6 Mẫu Singleton Si nh 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 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 28 https://fb.com/sinhvienzonevn 10.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ó 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 ne C om Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 29 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 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 Si nh Vi 10.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 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 30 https://fb.com/sinhvienzonevn ... Tp.HCM © 2010 SinhVienZone. com Mơn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 28 https://fb .com/ sinhvienzonevn 10.6 Mẫu Singleton Các phần tử tham... 2010 SinhVienZone. com return copy of shelf; Môn : Nhập môn Công nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide 18 https://fb .com/ sinhvienzonevn 10.4 Mẫu Prototype Các. .. Tp.HCM © 2010 SinhVienZone. com Mơn : Nhập mơn Cơng nghệ phần mềm Chương 10 : Các mẫu thiết kế phục vụ khởi tạo ₫ối tượng Slide https://fb .com/ sinhvienzonevn 10.2 Mẫu Abstract Factory Các phần tử tham