Sơ đồ lớp mẫu Extension Object

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Phát triển mẫu thiết kế phần mềm và ứng dụng (Trang 93 - 95)

 Subject (Component): xác định định danh của một sự trừu tƣợng. Nó khai báo giao diện để truy vấn xem là một đối tƣợng có một sự mở rộng đặc biệt. Trong trƣờng hợp đơn giản nhất, một giao diện đƣợc xác định bởi một xâu.

 Extension (ComponentExtension): lớp cơ sở cho tất cả các sự mở rộng. Nó xác định sự hỗ trợ cho quản lý bản thân các sự mở rộng. Các sự mở rộng biết các đối tƣợng sở hữu của nó.

 ConcreteSubject (StandardTextComponent): thực thi phép toán GetExtension để trả về một đối tƣợng mở rộng tƣơng ứng khi client yêu cầu nó.

 AbstractExtension (TextAccessor): khai báo giao diện cho một sự mở rộng xác định.

 ConcreteExtension (StandardTextAccessor): thực thi giao diện mở rộng cho một thành phần nhất định. Lƣu trữ trạng thái kết hợp với một sự mở rộng xác định. Một client yêu cầu một Subject cho một sự mở rộng xác định.

Khi sự mở rộng tồn tại Subject trả về một đối tƣợng mở rộng tƣơng ứng. Client sau đó sử dụng đối tƣợng mở rộng để truy cập các chức năng mở rộng

Nếu Subject không hỗ trợ một sự mở rộng, nó trả về null để báo hiệu rằng nó không hỗ trợ điều đó.

Các đối tƣợng mở rộng làm cho dễ dàng các giao diện thêm vào. Việc thêm vào một giao diện mới vào một Subject đƣợc đơn giản hóa bởi vì điều này không yêu cầu

bất kỳ sự thay đổi đối với giao diện subject đang tồn tại. Các đối tƣợng mở rộng cung cấp các chức năng mở rộng này trong khi bản thân nó bảo vệ sự trừu tƣợng chính.

Giao diện lớp không bị phồng lên bởi các sự trừu tƣợng chính. Một sự trừu tƣợng chính không trở thành bị ô nhiễm bởi các phép toán xác định client. Điều này có thể đạt đƣợc bởi sự phân lớp sự trừu tƣợng chính. Đó là các phép toán xác định client đƣợc định nghĩa trong các lớp con. Dẫu sao các kết quả này trong hệ thống phân lớp có thể khó quản lý. Sự kế thừa là tĩnh và yêu cầu tạo ra một lớp mới cho mỗi giao diện thêm vào.

Hỗ trợ cho mô hình hóa các vai trò khác nhau của một sự trừu tƣợng chính trong các hệ thống con khác nhau. Khi một sự trừu tƣợng đƣợc sử dụng qua các hệ thống con, nó thƣờng đóng các vai trò khác nhau. Mỗi vai trò yêu cầu yêu cầu các trạng thái và cách cƣ xử. Các đối tƣợng mở rộng hỗ trợ điều này bởi việc mô hình một vai trò nhƣ một đối tƣợng mở rộng. Bởi việc giữ chia tách các vai trò, một hệ thống con không phải biết các vai trò đƣợc sử dụng trong các hệ thống con khác.

Các client trở thành phức tạp hơn. Việc sử dụng giao diện mở rộng sẽ phức tạp hơn là giao diện đƣợc cung cấp bởi bản thân subject. Một client phải truy vấn giao diện và kiểm tra xem là nó có tồn tại hay không. Điều này đƣa ra các sự kiểm thử mở rộng và các đƣờng dẫn điều khiển trong chƣơng trình.

Thực thi

Sự mở rộng trong hay ngoài. Một vấn đề chính là làm thế nào, các sự mở rộng đƣợc tạo ra và quản lý. Một giải pháp là để lƣu trữ một đối tƣợng mở rộng trong một biến thực thể của ConcreteSubject. Khi một sự mở rộng đƣợc yêu cầu, nó có thể đƣợc trả về cho client. Giải pháp này thừa nhận rằng ConcreteSubject biết các sự mở rộng của nó và do đó chúng đƣợc xem xét nhƣ là bên trong. Trong giải pháp này, có thể gắn kết các đối tƣợng mới từ bên ngoài. Dẫu sao, sự thực thi này chỉ thêm phép toán truy cập GetExtension và không yêu cầu bất kỳ trạng thái nào trong Subject.

Một sự thay thế mà cho phép các client gắn kết các sự mở rộng đƣợc thể hiện theo hình dƣới đây

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Phát triển mẫu thiết kế phần mềm và ứng dụng (Trang 93 - 95)

Tải bản đầy đủ (PDF)

(113 trang)