Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
428,47 KB
Nội dung
Thiết kế mẫu (Design Pattern) Thiết kế mẫu (Design Pattern) Bởi: Khoa CNTT ĐHSP KT Hưng Yên Giới thiệu phân loại thiết kế mẫu Trong phát triển phần mềm đại, kiến trúc tổng thể dự án đóng vai trò quan trọng, đặc biệt với khung (framework) mẫu thiết kế (design pattern) Bài viết giúp bạn hiểu cách tổng quan pattern cách thức thiết kế số pattern tiêu biểu PATTERN gì? Pattern mô tả giải pháp chung vấn đề thiết kế thường “lặp lại” nhiều dự án Nói cách khác, pattern xem “khuôn mẫu” có sẵn áp dụng cho nhiều tình khác để giải vấn đề cụ thể Trong hệ thống phần mềm hướng đối tượng bắt gặp vấn đề lặp lại Đặc điểm chung: • Pattern hiểu theo nghĩa tái sử dụng ý tưởng mã lệnh Pattern cho phép nhà thiết kế ngồi lại với giải vấn đề mà nhiều thời gian tranh cãi Trong nhiều trường hợp, dự án phần mềm thất bại nhà phát triển hiểu biết chung vấn đề kiến trúc phần mềm Ngoài ra, pattern cung cấp thuật ngữ khái niệm chung thiết kế Nói cách đơn giản, đề cập đến pattern đấy, biết pattern nhanh chóng hình dung “bức tranh” giải pháp Và cuối cùng, áp dụng pattern hiệu việc bảo trì phần mềm tiến hành thuận lợi hơn, nắm bắt kiến trúc hệ thống nhanh • Pattern hỗ trợ tái sử dụng kiến trúc mô hình thiết kế phần mềm theo quy mô lớn 1/21 Thiết kế mẫu (Design Pattern) Cần phân biệt design pattern với framework Framework hỗ trợ tái sử dụng mô hình thiết kế mã nguồn mức chi tiết Trong đó, design pattern vận dụng mức tổng quát hơn, giúp nhà phát triển hình dung ghi nhận cấu trúc tĩnh động quan hệ tương tác giải pháp trình thiết kế ứng dụng chuyên khu riêng biệt • Pattern đa tương thích Pattern không phụ thuộc vào ngôn ngữ lập trình, công nghệ tảng lớn J2EE Sun hay Microsoft NET Framework Tiềm ứng dụng pattern lớn Các thiết kế dựa pattern sử dụng nhiều phần mềm mã nguồn mở, tảng J2EE NET Trong dạng ứng dụng này, dễ dàng nhận số tên lớp chứa tiền tố hậu tố Factory, Proxy, Adapter Phân loại pattern Pattern phân loại làm nhóm sau đây: • Nhóm cấu thành (Creational Pattern): Gồm Factory, Abstract Factory, Singleton, Prototype, Builder Liên quan đến trình khởi tạo đối tượng cụ thể từ định nghĩa trừu tượng (abstract class, interface) • Nhóm cấu trúc tĩnh (Structural Pattern): Gồm Proxy, Adapter, Wrapper, Bridge, Facade, Flyweight, Visitor Liên quan đến vấn đề làm để lớp đối tượng kết hợp với tạo thành cấu trúc lớn • Nhóm tương tác động (Behavioral Pattern): Gồm Observer, State, Command, Iterator Mô tả cách thức để lớp đối tượng giao tiếp với Trong phần ta tìm hiểu mẫu thiết kế nhóm mẫu kiến tạo (Creational Pattern).Mẫu kiến tạo (Creational Pattern) Những mẫu hỗ trợ cho nhiệm vụ lập trình hướng đối tượng – khởi tạo đối tượng hệ thống Hầu hết hệ thống hướng đối tượng phức tạp yêu cầu nhiều đối tượng thể theo thời gian, mẫu hỗ trợ cho việc tạo tiến trình việc cung cấp khả năng: - Sự thể chung – Điều cho phép đối tượng tạo hệ thống không cần phải định nghĩa đặc tả kiểu lớp mã nguồn 2/21 Thiết kế mẫu (Design Pattern) - Đơn giản – Một vài mẫu làm cho việc khởi tạo đối tượng trở nên dễ dàng, lớp “gọi” khởi tạo đối tượng viết mã nhiều phức tạp Abstract Factory Method Pattern - Ý nghĩa Đóng gói nhóm lớp đóng vai trò “sản xuất” (Factory) ứng dụng, lớp dùng để tạo lập đối tượng Các lớp sản xuất có chung giao diện lập trình kế thừa từ lớp cha ảo gọi “lớp sản xuất ảo” - Cấu trúc mẫu Trong đó: + AbstractFactory: lớp trừu tượng, tạo đối tượng thuộc lớp trừu tượng là: AbstractProductA AbstractProductB + ConcreteFactoryX: lớp kế thừa từ AbstractFatory, lớp tạo đối tượng cụ thể + AbstractProduct: lớp trừu tượng, đối tượng cụ thể thể lớp dẫn xuất từ lớp này.- Tình áp dụng + Phía trình khách không phụ thuộc vào việc sản phẩm tạo + Ứng dụng cấu hình với nhiều họ sản phẩm 3/21 Thiết kế mẫu (Design Pattern) + Các đối tượng cần phải tạo tập hợp để tương thích với + Chúng ta muốn cung cấp tập lớp muốn thể ràng buộc, mối quan hệ chúng mà thực thi chúng(interface).Ví dụ 6.1 Giả sử ta cần viết ứng dụng quản lý địa số điện thoại cho quốc gia giới Điạ số địa thoại quốc gia có số điểm giống số điểm khác Ta xây dựng sơ đồ lớp sau: Ta xây dựng phương thức tạo Address, PhoneNumber cụ thể lớp USAAddressPhoneFactory, FrechAddressPhoneFactory Với phương thực createProductAddress() lớp AAddressPhoneFactory trả đối tượng lớp USAAddress Với phương thực createProductAddress() lớp FrechAddressPhoneFactory trả đối tượng lớp FrechAddressTương tự với PhoneNumber 4/21 Thiết kế mẫu (Design Pattern) AddressFactory.java public interface AddressFactory { public Address createAddress(); public PhoneNumber createPhoneNumber(); } Address.java public abstract class Address { private String street; private String city; private String region; private String postalCode; public static final String EOL_STRING = System.getProperty("line.separator"); public static final String SPACE = " "; public String getStreet() { return street; } public String getCity() { return city; } public String getPostalCode() { return postalCode; } public String getRegion() { return region; } 5/21 Thiết kế mẫu (Design Pattern) public abstract String getCountry(); public String getFullAddress() { return street + EOL_STRING + city + SPACE + postalCode + EOL_STRING; } public void setStreet(String newStreet) { street = newStreet; } public void setCity(String newCity) { city = newCity; } public void setRegion(String newRegion) { region = newRegion; } public void setPostalCode(String newPostalCode) { postalCode = newPostalCode; } } USAddressFactory.java public class USAddressFactory implements AddressFactory{ public Address createAddress(){ return new USAddress(); } public PhoneNumber createPhoneNumber(){ return new USPhoneNumber(); } } USAddress.java public class USAddress extends Address{ 6/21 Thiết kế mẫu (Design Pattern) private static final String COUNTRY = "UNITED STATES"; private static final String COMMA = ","; public String getCountry(){ return COUNTRY; } public String getFullAddress(){ return getStreet() + EOL_STRING + getCity() + COMMA + SPACE + getRegion() + SPACE + getPostalCode() + EOL_STRING + COUNTRY + EOL_STRING; } } Tương tự cho lớp PhoneNumber USAPhoneNumber Builder Pattern - Ý nghĩa Phân tách khởi tạo thành phần đối tượng phức hợp, để khởi tạo mà tạo nên nhiều định dạng khác - Cấu trúc mẫu 7/21 Thiết kế mẫu (Design Pattern) Trong đó: + Director: lớp điều khiển tạo đối tượng Product + Builder: lớp trừu tượng cho phép tạo đối tượng Product từ phương thức nhỏ khởi tạo thành phần Product + ConcreteBuilder: lớp dẫn xuất Builder, khởi tạo đối tượng cụ thể, lớp khởi tạo đối tượng - Tình áp dụng + Có cấu trúc bên phức tạp (đặc biệt biến tập đối tượng liên quan với nhau) + Có thuộc tính phụ thuộc vào thuộc tính kháco Sử dụng đối tượng khác hệ thống mà khó khởi tạo khởi tạo phức tạp - Ví dụ 6.2 Ta lại xét đối tượng Address, có thành phần sau: Street, City Region Ta phân tách việc khởi tạo đối tượng Address thành phần : buildStreet, buildCity buildRegion 8/21 Thiết kế mẫu (Design Pattern) Trong đó: + AddressDirector: lớp tạo đối tượng Address + AddressBuilder: lớp trừu tượng cho phép tạo đối tượng Address phương thức khởi tạo thành phần Addresso USAddressBuilder: lớp tạo Address USAddressBuilder tạo địa theo chuẩn USA Address.java class Address(){ private String street; private String city; private String region; /** * @return the city */ public String getCity() { return city; } 9/21 Thiết kế mẫu (Design Pattern) /** * @param city the city to set */ public void setCity(String city) { this.city = city; } /** * @return the region */ public String getRegion() { return region; } /** * @param region the region to set */ public void setRegion(String region) { this.region = region; } /** * @return the street */ public String getStreet() { 10/21 Thiết kế mẫu (Design Pattern) return street; } /** @param street the street to set **/ public void setStreet(String street) { this.street = street; } } AddressBuilder.java abstract class AddressBuilder{ abstract public void buildStreet(String street){} abstract public void buildCity(String city){} abstract public void buildRegion(String region){} } USAddressBuilder.java class USAddressBuilder extends AddressBuilder { private Address add; public void buildStreet(String street){ add.setStreet(street); } public void buildCity(String city){ add.setCity(city); } 11/21 Thiết kế mẫu (Design Pattern) public void buildRegion(String region){ add.setRegion(region); } public Address getAddress(){ return add; }} AddressDirector.java class AddressDirector{ public void Contruct(AddressBuilder builder, String street, String city, String region){ builder.buildStreet(street); builder.buildCity(city); builder.buildRegion(region); } } Client.java class Client{ AddressDirector director = new AddressDirector(); USAddressBuilder b = new USAddressBuilder(); director.Contruct(b “Street 01”, “City 01”, “Region 01”); Address add = b.getAddress(); } 12/21 Thiết kế mẫu (Design Pattern) Một số patten khác Chúng ta quy ước với “giao diện lớp” hiểu interface abstract class đơn định nghĩa lớp Factory pattern Định nghĩa Factory Pattern định nghĩa lớp (interface, abstract, class) đóng vai trò “nhà xưởng” có nhiệm vụ khởi tạo đối tượng “cụ thể” ứng dụng chạy Tại thời điểm thiết kế đối tượng định nghĩa trừu tượng - Ý nghĩa Định nghĩa phương thức chuẩn để khởi tạo đối tượng, phần phương thức tạo, việc định kiểu đối tượng tạo phụ thuộc vào lớp - Cấu trúc mẫu Trong đó: + Creator lớp trừu tượng, khai báo phương thức factoryMethod() không cài đặt + Product lớp trừu tượng + ConcreteCreatorA ConcreteCreatorB lớp kế thừa từ lớp Creator để tạo đối tượng riêng biệt 13/21 Thiết kế mẫu (Design Pattern) + ConcreteProductA ConcreteProductB lớp kế thừa lớp Product, đối tượng lớp lớp ConcreteCreatorA ConcreteCreatorB tạo ra.- Tình áp dụng + Khi bạn muốn tạo framework mở rộng, có nghĩa cho phép tính mềm dẻo số định loại đối tượng tạo + Khi bạn muốn lớp con, mở rộng từ lớp cha, định lại đối tượng khởi tạo + Khi bạn biết khởi tạo đối tượng loại đối tượng khởi tạo + Bạn cần vài khai báo chồng phương thức tạo với danh sách tham số nhau, điều mà Java không cho phép Thay điều ta sử dụng Factory Method với tên khác nhau.- Ví dụ 6.3 Ta xét lại ví dụ địa phần Abstract Pattern Phân loại Factory Pattern thiết kế theo hai cách sau đây: - Based-class Factory Pattern: Mẫu sử dụng tính chất thừa kế để phân loại đối tượng tạo 14/21 Thiết kế mẫu (Design Pattern) - Based-object Factory Pattern: Sử dụng mối quan hệ kết hợp để tham chiếu tới đối tượng tạo Đối tượng tạo trở thành phần hay thuộc tính lớp Factory Chúng ta thường hay gặp loại Abstract Factory Pattern trình bày phần Abstract factory pattern Định nghĩa Abstract Factory cung cấp giao diện lớp có chức tạo tập hợp đối tượng liên quan phụ thuộc lẫn mà không lớp cụ thể thời điểm thiết kế Về chất, Abstract Factory Pattern khác Factory Pattern chỗ thân đối tượng Factory không cụ thể thời điểm thiết kế, tức giao diện lớp trừu tượng (interface, abstract) Nếu Factory Patttern phân loại đối tượng dựa tham số đầu vào Abstract Factory Pattern, thủ tục createObject() phụ thuộc thêm vào yếu tố phụ khác môi trường hệ điều hành chẳng hạn Ứng với yếu tố phụ thứ hai ta có lớp Factory cụ thể Thiết kế động với Abstract Factory Một vấn đề gặp phải khung giao diện Abstract Factory thường hay bị sửa đổi, thí dụ bổ sung thủ tục chẳng hạn, lớp cụ thể thực thi giao diện phải dịch triển khai lại Để giảm nhẹ vấn đề người ta thường thiết kế giao diện Abstract Factory cách linh động Singleton pattern (Static Factory Pattern) Định nghĩa Singleton Pattern đảm bảo lớp có thực thể (instance) tạo đồng thời cung cấp truy cập toàn cục đến đối tượng tạo Chúng ta xét trường hợp có nhiều đối tượng có chung số tính chất tạo ứng với yêu cầu từ đối tượng khách (client), lúc độ phức tạp tăng lên ứng dụng chiếm dụng nhiều vùng nhớ Singleton Pattern giải pháp đặc biệt Factory Pattern chỗ đối tượng sinh điểm truy cập toàn cục “duy nhất” chương trình gọi đến, hay nói cách khác tất đối tượng khách gọi đến chia sẻ đối tượng tạo Ứng dụng rõ rệt Singleton Pattern thấy dịch vụ web triệu gọi đối tượng từ xa, đối tượng nằm server phục vụ chung cho tất 15/21 Thiết kế mẫu (Design Pattern) ứng dụng khách (singleton) đáp ứng ứng dụng khách riêng lẻ tự bị phá huỷ sau (single call) Về mẫu thiết kế tiêu biểu nhóm cấu thành: Factory, Abstract Factory Singleton, bạn tham khảo thêm tài liệu phương pháp xây dựng cụ thể mã nguồn chương trình viết C#.NET địa chỉ: http://www.codeproject.com/gen/desig assFactory.aspProxy pattern Định nghĩa Proxy Pattern mẫu thiết kế mà tất truy cập trực tiếp đối tượng chuyển hướng vào đối tượng trung gian (Proxy Class) Nếu Factory Pattern giúp quản lý đối tượng tốt Proxy Pattern lại có nhiệm vụ bảo vệ việc truy cập đối tượng thông qua Proxy, hay gọi truy cập gián tiếp Proxy ủy quyền phía ứng dụng khách cho phép tương tác với đối tượng đích theo cách khác nhau; gửi yêu cầu dịch vụ đó, theo dõi trạng thái vòng đời đối tượng, xây dựng lớp vỏ bảo vệ đối tượng Thí dụ phát đối tượng thư viện DLL bị khai thác truy cập vào số trường quan trọng, mở mã nguồn thư viện dịch để vá lỗ hổng, giải pháp lúc xây dựng proxy ngăn chặn truy cập trường cuối biên dịch lại thành DLL Phân loại Độ phức tạp giải pháp sử dụng Proxy Pattern phụ thuộc vào tình toán đưa ra, tìm hiểu nguyên tắc làm việc proxy đây: - Remote Proxy: Client truy cập qua remote proxy để tham chiếu tới đối tượng bảo vệ nằm bên ứng dụng (trên máy máy khác) dịch vụ Windows, dịch vụ web, ứng dụng xa Mô hình "che giấu" đối tượng triệu gọi nằm xa client truy cập vào đối tượng nằm chuyên khu làm việc (domain) - Virtual Proxy: Virtual Proxy tạo đối tượng trung gian có yêu cầu thời điểm thực thi ứng dụng, nhờ làm tăng hiệu suất ứng dụng - Monitor Proxy: Monitor Proxy thiết lập ràng buộc bảo mật đối tượng cần bảo vệ, ngăn không cho client truy cập số trường quan trọng đối tượng - Protection Proxy: Đối với proxy phạm vi truy cập client khác khác Protection Proxy kiểm tra quyền truy cập client có dịch vụ yêu cầu 16/21 Thiết kế mẫu (Design Pattern) - Cache Proxy: Cung cấp không gian lưu trữ tạm thời cho kết trả từ đối tượng đó, kết tái sử dụng cho client chia sẻ chung yêu cầu gửi đến làm tăng đáng kể hiệu suất chương trình - Firewall Proxy: Bảo vệ đối tượng từ chối yêu cầu xuất xứ từ client không tín nhiệm - Smart Reference Proxy: Là nơi kiểm soát hoạt động bổ sung đối tượng tham chiếu, ví dụ kiểm soát vòng đời đối tượng, lưu lại số lần tham chiếu vào đối tượng - Synchronization Proxy: Đảm bảo nhiều client truy cập vào đối tượng mà không gây xung đột Thực tế có nhiều tình khiến phải nghĩ đến thiết kế Một synchronization proxy thiết lập kiểm soát nhiều yêu cầu cập nhật liệu cách đồng thời, thời điểm bắt đầu cập nhật có client với mức ưu tiên cao giành khoá để đánh dấu client khác cần phải chờ đến lượt Synchronization proxy hoạt động hiệu phổ biến thiết kế toán đa tuyến Một tượng hay xảy với thiết kế client chiếm dụng khoá lâu (và chí mãi) khiến cho số lượng client danh sách hàng đợi tăng lên, hoạt động hệ thống bị ngừng trệ, dẫn đến tượng “tắt nghẽn” tượng khoá giữ vô thời hạn đối tượng Trong trường hợp người ta cải tiến thành mẫu thiết kế phức tạp hơn, CopyOn-Write Proxy - Copy-On-Write Proxy: Cope-On-Write Proxy đảm bảo client phải chờ vô thời hạn Thiết kế phức tạp nên ứng dụng Copy-On-Write Proxy thay Synchronization Proxy hệ thống dự đoán thường xuyên bị ngừng trệ có tượng “tắt nghẽn” xảy Đặc điểm chung Proxy Pattern có đặc điểm chung sau đây: • Cung cấp mức truy cập gián tiếp vào đối tượng • Tham chiếu vào đối tượng đích chuyển tiếp yêu cầu đến đối tượng • Cả proxy đối tượng đích kế thừa thực thi chung lớp giao diện Mã máy dịch cho lớp giao diện thường “nhẹ” lớp cụ thể giảm thời gian tải liệu server client 17/21 Thiết kế mẫu (Design Pattern) Adapter pattern Định nghĩa Adapter Pattern biến đổi giao diện lớp thành giao diện khác mà đối tượng client hiểu Lớp với giao diện tạo gọi Adapter Nguyên tắc Adapter Pattern nằm chỗ làm để lớp với giao diện không tương thích làm việc với Nguyên lý xây dựng Adapter Pattern đơn giản: xây dựng lớp với giao diện mong muốn cho lớp giao tiếp với lớp cho trước ứng với giao diện khác Adapter Pattern không quản lý tập trung đối tượng gần giống Factory Pattern, mà kết nối với nhiều lớp liên quan với Ví dụ lớp A sau thực thi giao diện muốn bổ sung phương thức từ lớp B đó, kết nối A với B thông qua hình thức kế thừa liên kết đối tượng thành phần Adapter Pattern có giống chút với Proxy Pattern chỗ tận dụng tối đa tính chất “uỷ quyền” (delegation); lớp Adapter kết nối với đối tượng gọi Adaptee Adapter uỷ quyền truy cập vào Adaptee, lớp Adapter đóng vai trò kênh trung gian để client truy cập vào số thành phần quan trọng lớp Adaptee Đặc điểm • Adapter Pattern hướng tập trung vào giải tương thích hai giao diện tồn tại, giảm công sức viết lại mã lệnh xuống mức tối thiểu • Tái sử dụng giao diện cũ Adapter Pattern thực cần thiết thứ thiết kế từ trước Phạm vi ứng dụng Adapter Pattern ứng dụng trường hợp: • Cần tích hợp vài module vào chương trình • Không thể sát nhập trực tiếp module vào chương trình (ví dụ module thư viện dịch DLL, CLASS ) • Module tồn giao diện mong muốn như: • Cần nhiều phương thức cho module 18/21 Thiết kế mẫu (Design Pattern) Wrapper pattern Wrapper Pattern trường hợp đặc biệt Adapter Pattern Nếu Adapter đơn “nhúng” (wrap) lớp với giao diện không tương thích với để chúng hoạt động gọi tên riêng Wrapper Pattern Khi lớp Adapter gọi lớp Wrapper Đây quan hệ “có một”, tức giao diện không tương thích nhúng vào thành phần giao diện khác Đặc điểm Đối tượng Wrapper mô tất hành vi (hàm, thủ tục) giao diện nhúng hành vi với tên y hệt Thí dụ lớp nhúng A có thủ tục SpecificRequest() lớp Wrapper phải có thủ tục SpecificRequest() tham chiếu đến thủ tục tên A (Ngoài đối tượng Wraper bổ sung phương thức khác cần thiết) Đặc điểm đưa dựa nguyên tắc thiết kế “Law of Demeter” nói không nên tham chiếu đối tượng sâu lớp Các phương thức Adaptee “nhúng” Wrapper cách truyền lời gọi với tham số tới phương thức tương ứng Adaptee, trả kết giống Các thành viên (thuộc tính, trường, kiện) nhúng Wrapper có tính chất giống hệt lớp nhúng (tên, kiểu liệu, phạm vi truy cập ) Từ đặc điểm trên, thấy Wrapper Pattern cho phép module chương trình tương tác môi trường khác biệt với môi trường phát triển module (ví dụ C++ Java) Khác biệt Wrapper Pattern Adapter Pattern Sự khác biệt Wrapper Adapter nằm mục đích sử dụng: Adapter Pattern định hướng cho đối tượng tồn làm việc với đối tượng khác biến đổi logic theo cách thức đó, Wrapper Pattern đơn cung cấp giao diện kết hợp đối tượng xây dựng từ ngôn ngữ khác ngôn ngữ, hệ điều hành hệ điều hành khác Proxy Adapter Pattern Nếu lớp Adapter đóng thêm vai trò proxy bảo vệ cho Adaptee ta có mô hình Proxy Adapter Pattern, trường hợp đặt tên lớp với nghĩa kết hợp, ví dụ BankProxyAdapter Bài đưa số mẫu thiết kế tiêu biểu giúp bạn thấy tầm quan trọng design pattern việc nâng cao chất lượng phần mềm yếu tố: hiệu suất ứng 19/21 Thiết kế mẫu (Design Pattern) dụng, độ ổn định, tái sử dụng, tính bảo mật Các bạn tìm hiểu thêm mẫu thiết kế cao cấp khác nhiều tài liệu thiết kế phần mềm Prototype - Ý nghĩa Giúp khởi tạo đối tượng cách copy đối tượng khác tồn (đối tượng “prototype” – nguyên mẫu).- Cấu trúc mẫu Trong đó: + Prototype lớp trừu tượng cài đặt phương thức myClone() phương thức copy thân đối tượng tồn + ConcretePrototype1 ConcretePrototype2 lớp kế thừa lớp Prototype.- Tình áp dụng + Khi bạn muốn khởi tạo đối tượng cách chép từ đối tượng tồn - Ví dụ 6.4 20/21 Thiết kế mẫu (Design Pattern) 21/21 [...]... phần mềm ở các yếu tố: hiệu suất ứng 19/21 Thiết kế mẫu (Design Pattern) dụng, độ ổn định, tái sử dụng, tính bảo mật Các bạn có thể tìm hiểu thêm về các mẫu thiết kế cao cấp khác ở rất nhiều tài liệu thiết kế phần mềm Prototype - Ý nghĩa Giúp khởi tạo đối tượng bằng cách copy một đối tượng khác đã tồn tại (đối tượng này là “prototype” – nguyên mẫu) .- Cấu trúc mẫu Trong đó: + Prototype là lớp trừu tượng... xét lại ví dụ về các địa chỉ ở phần Abstract Pattern Phân loại Factory Pattern được thiết kế theo một trong hai cách sau đây: - Based-class Factory Pattern: Mẫu này sử dụng tính chất thừa kế để phân loại các đối tượng được tạo ra 14/21 Thiết kế mẫu (Design Pattern) - Based-object Factory Pattern: Sử dụng mối quan hệ kết hợp để tham chiếu tới một đối tượng sẽ được tạo ra Đối tượng được tạo ra sẽ trở... dịch vụ web khi triệu gọi các đối tượng từ xa, ở đó đối tượng nằm trên server hoặc sẽ phục vụ chung cho tất cả 15/21 Thiết kế mẫu (Design Pattern) các ứng dụng khách (singleton) hoặc sẽ chỉ đáp ứng một ứng dụng khách riêng lẻ nào đó rồi tự bị phá huỷ sau đó (single call) Về các mẫu thiết kế tiêu biểu trong nhóm cấu thành: Factory, Abstract Factory và Singleton, các bạn có thể tham khảo thêm tài liệu về... cần thiết khi mọi thứ đã được thiết kế từ trước Phạm vi ứng dụng Adapter Pattern được ứng dụng trong các trường hợp: • Cần tích hợp một vài module vào chương trình • Không thể sát nhập trực tiếp module vào chương trình (ví dụ như module thư viện đã được dịch ra DLL, CLASS ) • Module đang tồn tại không có giao diện mong muốn như: • Cần nhiều hơn phương thức cho module đó 18/21 Thiết kế mẫu (Design Pattern). .. thì phụ thuộc vào các lớp con - Cấu trúc mẫu Trong đó: + Creator là lớp trừu tượng, khai báo phương thức factoryMethod() nhưng không cài đặt + Product cũng là lớp trừu tượng + ConcreteCreatorA và ConcreteCreatorB là 2 lớp kế thừa từ lớp Creator để tạo ra các đối tượng riêng biệt 13/21 Thiết kế mẫu (Design Pattern) + ConcreteProductA và ConcreteProductB là các lớp kế thừa của lớp Product, các đối tượng... b.getAddress(); } 12/21 Thiết kế mẫu (Design Pattern) Một số patten khác Chúng ta quy ước với nhau rằng “giao diện lớp” được hiểu như interface hoặc abstract class vì đây đơn thuần là các định nghĩa lớp Factory pattern Định nghĩa Factory Pattern định nghĩa một lớp (interface, abstract, class) đóng vai trò như một “nhà xưởng” có nhiệm vụ khởi tạo đối tượng “cụ thể” khi ứng dụng chạy Tại thời điểm thiết kế đối tượng... chiếu vào đối tượng đích và chuyển tiếp các yêu cầu đến đối tượng đó • Cả proxy và đối tượng đích đều kế thừa hoặc thực thi chung một lớp giao diện Mã máy dịch cho lớp giao diện thường “nhẹ” hơn các lớp cụ thể và do đó có thể giảm được thời gian tải dữ liệu giữa server và client 17/21 Thiết kế mẫu (Design Pattern) Adapter pattern Định nghĩa Adapter Pattern biến đổi giao diện của một lớp thành một giao... Monitor Proxy: Monitor Proxy sẽ thiết lập các ràng buộc bảo mật trên đối tượng cần bảo vệ, ngăn không cho client truy cập một số trường quan trọng của đối tượng - Protection Proxy: Đối với proxy này thì phạm vi truy cập của các client khác nhau sẽ khác nhau Protection Proxy sẽ kiểm tra các quyền truy cập của client khi có một dịch vụ được yêu cầu 16/21 Thiết kế mẫu (Design Pattern) - Cache Proxy: Cung... đến thiết kế này Một synchronization proxy được thiết lập có thể kiểm soát được nhiều yêu cầu cập nhật dữ liệu một cách đồng thời, tại thời điểm bắt đầu cập nhật chỉ có một client với mức ưu tiên cao nhất giành được khoá để đánh dấu rằng các client khác cần phải chờ đến lượt Synchronization proxy hoạt động rất hiệu quả và phổ biến trong thiết kế các bài toán đa tuyến Một hiện tượng hay xảy ra với thiết. .. thức myClone() là phương thức copy bản thân đối tượng đã tồn tại + ConcretePrototype1 và ConcretePrototype2 là các lớp kế thừa lớp Prototype.- Tình huống áp dụng + Khi bạn muốn khởi tạo một đối tượng bằng cách sao chép từ một đối tượng đã tồn tại - Ví dụ 6.4 20/21 Thiết kế mẫu (Design Pattern) 21/21 ... Phân loại Factory Pattern thiết kế theo hai cách sau đây: - Based-class Factory Pattern: Mẫu sử dụng tính chất thừa kế để phân loại đối tượng tạo 14/21 Thiết kế mẫu (Design Pattern) - Based-object... lớp đối tượng giao tiếp với Trong phần ta tìm hiểu mẫu thiết kế nhóm mẫu kiến tạo (Creational Pattern) .Mẫu kiến tạo (Creational Pattern) Những mẫu hỗ trợ cho nhiệm vụ lập trình hướng đối tượng... phục vụ chung cho tất 15/21 Thiết kế mẫu (Design Pattern) ứng dụng khách (singleton) đáp ứng ứng dụng khách riêng lẻ tự bị phá huỷ sau (single call) Về mẫu thiết kế tiêu biểu nhóm cấu thành: