Báo Cáo Môn Học Thiết Kế Phần Mềm Hướng Đối Tượng Đề Tài ABSTRACT FACTORYBáo Cáo Môn Học Thiết Kế Phần Mềm Hướng Đối Tượng Đề Tài ABSTRACT FACTORYBáo Cáo Môn Học Thiết Kế Phần Mềm Hướng Đối Tượng Đề Tài ABSTRACT FACTORYBáo Cáo Môn Học Thiết Kế Phần Mềm Hướng Đối Tượng Đề Tài ABSTRACT FACTORY
ABSTRACT FACTORY Khái niệm - Abstract Factory, tên đầy đủ Abstract Factory Pattern Design Pattern thuộc nhóm kiến tạo (Creational) áp dụng phổ biến thiết kế lập trình Nó cung cấp giao diện có chức tạo tập đối tượng có quan hệ phụ thuộc mà không cần rõ lớp cụ thể thời điểm thiết kế - Mẫu thiết kế Abstract Factory đóng gói nhóm lớp đóng vai trò "sản xuất" (Factory) ứng dụng, lớp dùng để tạo đối tượng Các lớp sản xuất có chung giao diện kế thừa từ lớp cha ảo gọi "lớp sản xuất ảo" (Abstract Factory) - Người ta gọi Abstract Factory “Factory of factories” Mục đích - Cung cấp giao diện để tạo họ đối tượng phụ thuộc liên quan đến mà khơng cần xác định xác lớp thực - Tạo đối tượng mà khơng cần biết xác kiểu liệu Ví dụ, ta đọc liệu từ file txt để lấy thơng tin tạo đối tượng Trong file txt chứa số nguyên Trong mã nguồn ta viết rằng, liệu đọc số tạo đối tượng A, tạo đối tượng B Vậy rõ ràng, đối tượng bạn tạo trình run time, nghĩa lúc bạn viết mã nguồn chương trình, bạn chưa xác định đối tượng cần tạo Abstract Factory giúp bạn giải vấn đề - Giúp mã nguồn bạn trở nên dễ dàng bảo trì có thay đổi Abstract Factory hình dung nhà máy lớn chứa nhiều nhà máy Mỗi nhà máy Factory Ta sử dụng Abstract Factory để tạo tất đối tượng chương trình Khi ta sửa đổi thêm đối tượng, đối tượng khác không bị ảnh hưởng Cấu trúc Hình : Cấu trúc Abstract Factory Các thành phần tham gia, ý nghĩa vai trò - AbstractFactory: định nghĩa giao tiếp cho thao tác khởi tạo đối tượng ảo (AbstractProduct) - ConcreteFactory: thực thi giao tiếp AbstractFactory để tạo đối tượng cụ thể (ConcreteProduct) - AbstractProduct: định nghĩa lớp ảo cho loại đối tượng "sản phẩm" (Product) - Product: kế thừa từ từ lớp “sản phẩm ảo” (AbstractProduct), lớp Product định nghĩa đối tượng cụ thể - Client: sử dụng giao diện khai báo AbstractFactory AbstractProduct Tính chất đặc thù - Khơng tạo đối tượng mà tạo tập đối tượng liên quan (tạo Factory khác) - Abstract Factory Pattern, phương thức tạo đối tượng (CreateObject()) không phụ thuộc vào yếu tố đầu vào - Cung cấp phương thức hồn chỉnh (có thể tổng hợp thành library) để sinh đối tượng Tình áp dụng hệ a Tình áp dụng - Một hệ thống độc lập với sản phẩm tạo ra, biên soạn, trưng bày - Một hệ thống nên cấu hình với nhiều dịng sản phẩm - Một nhóm đối tượng sản phẩm liên quan thiết kế để sử dụng - Cung cấp thư viện lớp sản phẩm, để lộ giao diện, không để lộ triển khai họ b.Hệ - Nó tách biệt lớp cụ thể Mẫu Abstract Factory giúp bạn kiểm soát lớp đối tượng mà ứng dụng tạo Bởi Factory đóng gói trách nhiệm q trình tạo đối tượng Product, tách biệt Client từ lớp thực Các Client thao tác trường hợp thông qua giao diện trừu tượng chúng Tên lớp Product tách biệt trình thực Conrete Factory; chúng khơng xuất đoạn code Client - Nó làm cho việc trao đổi nhóm Product dễ dàng Các lớp học Conrete Factory xuất lần ứng dụng, nghĩa là, nơi khởi tạo lần Điều làm cho dễ dàng để thay đổi Concrete Factory ứng dụng sử dụng AbstractFactory Nó sử dụng cấu hình Product khác đơn giản cách thay đổi Concrete Factory Bởi Abstract Factory tạo nhóm đầy đủ Product, tồn nhóm Product thay đổi lúc - Nó thúc đẩy thống Product Khi đối tượng Product nhóm thiết kế để làm việc nhau, điều quan trọng ứng dụng sử dụng đối tượng từ nhóm thời điểm Abstract Factory làm cho điều dễ dàng để thực thi - Hỗ trợ loại Product khó Mở rộng Abstract Factory để sản xuất loại Product khơng dễ dàng Đó giao diện Abstract Factory gán cứng nhóm Product tạo Hỗ trợ loại Product đòi hỏi phải mở rộng giao diện Factory, bao gồm việc thay đổi lớp Abstract Factory tất lớp Ưu khuyết điểm Abstract Factory a Ưu điểm - Phát triển thực thi cách độc lập với phần lại ứng dụng thông qua giao diện chung - Thúc đẩy thống “sản phẩm” (Product) b.Khuyết điểm - Khó dự đốn vấn đề phát sinh tương lai - Nếu AbstractProduct khơng sinh ConcreteProduct khơng theo ý muốn - Rất khó để hỗ trợ loại “sản phẩm” (Product) Các mẫu liên quan - Factory Method, Factory Method dùng để thực thi Abstract Factory Trong cấu trúc Abstract Factory có chứa Factory Method Trong hình 2, phương thức CreateProductA() CreateProductB() Factory Method CreateProductA() sản xuất sản phẩm loại A, CreateProductB() sản xuất sản phẩm loại B Factory Method Hình 2: Factory Method in Abstract Factory Sự khác biệt Fatory Method Abstract Factory : Factory Method nhà máy sản xuất loại sản phẩm Muốn sản xuất loại sản phẩm khác phải xây nhà máy Ví dụ Hình 3, ta muốn thêm loại sản phẩm Bottled Drinking Water, ta phải thêm Factory :: Bottled Drinking Water kế thừa từ Factory, Factory :: Bottled Drinking Water ta định nghĩa lại phương thức BottledDrinkingWater(price: float) Hình 3: Factory Method Abstract Factory nhà máy có chứa nhiều mà máy, nhà máy sản xuất nhiều loại sản phẩm Như Hình Muốn sản xuất loại sản phẩm mới, ví dụ ProductC, ta cần thêm vào phương thức CreateProductC() vào AbstractFactory, vào ConcreateFactory1 ConcreateFactory2 ConcreateFactory1 ConcreateFactory2 10 - Singletone sử dụng ConcreteFactory - Prototype sử dụng AbstractProduct Một số ví dụ Hình 4: Mơ hình sản xuất điện thoại máy tính 11 class OOSD ContinentFactory + + + AfricaFactory + + + AnimalWorld CreateCarnivore(): Carnivore CreateHerbivore(): Herbivore CreatePlant(): Plant CreateCarnivore(): Carnivore CreateHerbivore(): Herbivore CreatePlant(): Plant + + - _carnivore: string = "" _herbivore: string = "" carnivore: Carnivore herbivore: Herbivore plant: Plant + + AnimalWorld(ContinentFactory) RunFoodChain(): void AmericaFactory + + + CreateCarnivore(): Carnivore CreateHerbivore(): Herbivore CreatePlant(): Plant Wolf + -herbivore -plant + Grass -carnivore Herbivore Plant + Carnivore Eat(Plant): string Bison Tree Eat(Plant): string Eat(Herbivore): string + Lion Wildebeest + Eat(Plant): string Eat(Herbivore): string + Eat(Herbivore): string Hình : Mơ hình giới động vật 12