3.2. Các mẫu dáng thiết kế (Mẫu thiết kế)
3.2.4.7.9 Những mẫu liên quan:
Adapter: Một adapter cung cấp một giao diện khác tới đối tượng nó điều biến. Theo mục đích này, proxy cung cấp giao diện tương tự như là chủ thể của nó.
Decorator: Mặc dù decorator có thể có các thực hiện giống nhau như proxy, decorator có mục đích khác nhau. Một decorator thêm một hoặc nhiều hơn nhiệm vụ tới đối tượng, vị trí mà proxy kiểm soát việc truy cập đến đối tượng.
Kết luận: Adaptor và Bridge có một số thuộc tính giống nhau. Cả hai mẫu này đều tăng cường tính linh động bởi việc cung cấp một mức gián tiếp tới đối tượng khác. Cả hai mẫu này đều liên quan tới những yêu cầu đối với đối tượng này từ một giao diện.
Sự khác nhau chủ yếu giữa hai mẫu này dựa vào những mục đích riêng của nó. Adadaptor tập trung giải quyết sự không tương đồng giữa hai giao
diện hiện có, nó không tập trung vào các giao diện này được thực hiện như thế nào, hoặc có được coi là có hoạt động độc lập hay không. Đó là cách để tạo hai lớp thiết kế độc lập cùng hoạt động với nhau. Bridge trái lại kết nối một khái niệm trừu tượng với các bước thực hiện của nó. Nó cung cấp một giao diện ổn định đến các đối tượng khác ngay cả khi nó giỳp bạn phân biệt các lớp thực hiện nó, đồng thời định vị trớ cỏc bước thực hiện mới trong hệ thống có liên quan.
Sự khác nhau giữa Adaptor mẫu và Bridge là thường được sử dụng tại những điểm khác nhau trong vòng đời của phần mềm . Một adaptor đều trở nên cần thiết khi bạn nhận thấy rằng hai lớp đối xứng nhau nên hoạt động cùng nhau nhìn chung để tránh việc mã phụ thuộc, việc kết nối là không thể thấy trước được; Ngược lại người sử dụng mỗi Bridge phải hiểu được trước rằng, mỗi trừu tượng phải có một số bước thực hiện và cả hai có thể liên quan đến nhau. Adaptor mẫu giúp chương trình hoạt động sau khi chúng được tạo ra, còn bridge mẫu làm cho chương trình hoạt động trước khi chúng được tạo ra. Điều đó không có nghĩa là adaptor mẫu kém tính năng hơn Bridge. Mỗi một mẫu này giải quyết một vấn đề khác nhau.
Có thể coi giao diện là một adadaptor, nhưng việc thông dịch đã chỉ ra thực tế là giao diện sẽ xác định một giao diện mới và bất cứ lúc nào một adaptor mẫu được tái sử dụng. Lưu ý rằng một Adaptor mẫu giúp hai giao diện đồng thời tồn tại và hoạt động cùng nhau để tạo ra một giao diện mới.
Tương quan giữa Composite, Decorator và Proxy. Composite và Decorator cú cỏc biểu đồ cấu trúc giống nhau và phản ánh thực tế là cả hai Composite và decorator đều phụ thuộc vào thành phần kết cấu để tạo một số đối tượng đóng mở. Điểm chung này có thể giúp bạn nghĩ tới một đối tượng bổ trợ như một phương tiện kết nối. Nhưng đặc điểm này không đúng với đặc điểm của mẫu Decorator . Sự giống nhau là ở những điểm nối và lặp lại với những mục đích khác nhau.
Decorator được thiết kế nhằm cung cấp tính năng cho các đối tượng không có các lớp Composite. Decorator tránh được sự nổ của lớp Composite mà xuất phát từ tính năng của các điểm nối có liên quan, có thể được xử lý đồng loạt ở nhiều đối tượng. Sự tập trung của nó không đồng loạt mà tiêu biểu. Những mục đích này là rõ ràng nhưng không bổ trợ cho nhau. Kết quả là Decorator và Composite thường được sử dụng phối hợp với nhau. Sẽ có một lớp ảo và một số các lớp Compositen có thể được kết hợp với nhau, một vài trong số đó là các Decorator và một số khác thực hiện xây dựng hệ thống. Trong trường hợp này, cả hai Composite và Decorator sẽ có một giao diện chung. Theo Decorator mỗi kết cấu là thành phần cơ bản. Theo
Composite mỗi Composite là một lá. Tất nhiên chỳng khụng sử dụng với nhau khi ta nhận thấy điều này, mục đích thực hiện của chúng là khác nhau.
Mẫu có cấu trúc giống Decorator là Proxy. Cả hai mẫu này mô tả cách cung cấp một cấp độ hướng gián tiếp tới một đối tượng và sự thực hiện của cả proxy và Decorator nhằm thông báo cho đối tượng khỏc đó được yêu cầu, tuy nhiên chúng lại được thiết kế với các mục đích khác nhau
Cũng giống như Decorator, Proxy thiết lập đối tượng và cung cấp giao diện xác định cho client. Không giống như Decorator , Proxy không liên quan đến việc tiếp xúc và tháo gỡ các thiết bị và đồng thời không được thiết kế cho các thành phần kết cấu. Mục đích của nó là cung cấp vị trí cho các đối tượng khi không thuận tiện khi không để truy nhập đối tượng một cách trực tiếp.
Trong Proxy mẫu các đối tượng xác định chức năng chính và tiếp cận tới chúng, trong Decorator thành phần kết cấu cung cấp một số bộ phận của chức năng nhiều hơn các de còn lại. Decorator xác định vị trí mà một chức năng cả các đối tượng có thể được quyết định tại một tệp thời gian, ít nhất là không thuận lợi. Sự đóng mở làm cho thành phần kết cấu trở nên cần thiết cho de. Trường hợp này không giống đối với Proxy, vì Proxy tập trung vào mối liên quan giữa Proxy và đối tượng của nó. Mối liên quan này có thể được giải thích bằng số liệu.
Sự khác nhau này là rất cơ bản, vỡ chỳng cú cỏc phương pháp giải quyết tiêu biểu trong việc thiết kế hướng đối tượng, nhưng điều này không có nghĩa là các mẫu này không thể nối kết với nhau. Bạn có thể nhận thấy, Proxy và de bổ trợ các chức năng tới một Proxy hoặc một Decorator riêng rẽ. Và rút ngắn khoảng cách giữa các đối tượng, mặc dù sự kết hợp này có thể có ích, nhưng cũng cần phải quyết định mẫu nào hữu ích hơn.