Các mẫu thiết kế Java EE này cung cấp các hướng dẫn giải pháp được thử nghiệm theo thời gian và các thực tiễn tốt nhất để tương tác đối tượng trong các lớp khác nhau của ứng dụng Java EE
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
TP HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO
BÁ́O CÁ́O ĐỒ ÁN
ĐỀ TÀI:
TÌM HIỂU LÝ THUYẾT VÀ̀ CÁ́C
MẪU THIẾT KẾ PHẦN MỀM CÓ
TRONG SPRING FRAMEWORK
Giảng viên hướng dẫn : Nguyễn Minh Đạo
Trang 2Thực hiện đề tài: Nhóm 09
STT Họ tên SV
1 Quách Diệu Khánh
MSSV 191102 26 191102 88 191101 57 191101 96 Tên đề tài: Tìm hiểu Spring Framework và̀ các mẫu thiết kế phần mềm có trong spring framework
Thời gian thực hiện: : 01/04/2022 – 20/05/2022
NHẬN XÉT CỦA GIẢNG VIÊN
Trang 3
Tp Hồ Chí Minh, ngày …., tháng …., năm 2022
Giảng viên hướng dẫn
Nguyễn Minh Đạo
2 Overview of GOF Design Patterns - Core Design Patterns 7
Giới thiệu về sức mạnh của các mẫu Design Patterns 7
3 Consideration of Structural and Behavioral Patterns 18
4 Wiring Beans using the Dependency Injection Pattern 34
Types of dependency injection patterns 34Constructor-based dependency injection 34Setter-based dependency injection 35Configuring the dependency injection pattern with Spring 36Annotating beans for autowiring Lookup-method injection pattern 36Implementing the Abstract Factory Pattern in Spring 37Implementation of FactoryBean interface in Spring 37
Trang 6LỜI CẢM ƠN
Chúng em xin gửi lời cảm ơn chân thành đến Khoa Đào tạo Chất lượng cao, Trường Đại học Sư phạm Kỹ thuật TP.HCM đã tạo điều kiện thuận lợi cho chúng em học tập và hoàn thành đề tài báo cáo này Đặc biệt, chúng em xin bày tỏ lòng biết ơn sâu sắc đến thầy Nguyễn Minh Đạo đã truyền đạt kiến thức và hướng dẫn chúng em trong quá trình hoàn thành báo cáo.
Nhóm em đã cố gắng vận dụng những kiến thức đã học được trong học kỳ qua để hoàn thành bài báo cáo Nhưng do kiến thức hạn chế và không có nhiều kinh nghiệm thực tiễn nên khó tránh khỏi những thiếu sót trong quá trình nghiên cứu và trình bày Rất kính mong sự góp ý của thầy để bài báo cáo của nhóm em được hoàn thiện hơn.
Một lần nữa, nhóm em xin trân trọng cảm ơn sự quan tâm giúp đỡ của thầy đã giúp
đỡ nhóm em trong quá trình thực hiện bài báo cáo này.
Xin trân trọng cảm ơn!
Trang 72 Overview of GOF Design Patterns -
Core Design Patterns
1 Giới thiệu về sức mạnh của các mẫu Design Patterns
Trên thực tế, cụm từ Design Pattern không liên quan đến bất kỳ ngôn
ngữ lập trình nào và nó cũng không cung cấp các giải pháp cụ thể cho các
vấn đề về ngôn ngữ, là một khái niệm kỹ thuật phần mềm mô tả các giải
pháp định kỳ cho các vấn đề phổ biến trong thiết kế phần mềm Các mẫu
này cũng đại diện cho các thực tiễn tốt nhất được sử dụng bởi các nhà phát
triển phần mềm có kinh nghiệm
Một mô hình thiết kế có ba đặc điểm chính:
+ Mẫu thiết kế dành riêng cho một kịch bản cụ thể hơn là một nền tảng Vìvậy, bối cảnh của nó là điều kiện xung quanh mà vấn đề tồn tại Bối cảnh phải đượcghi lại trong khuôn mẫu
+ Các mẫu thiết kế đã được phát triển để cung cấp các giải pháp tốt nhất chomột số vấn đề nhất định gặp phải trong quá trình phát triển phần mềm.Vì vậy, điềunày nên được giới hạn bởi bối cảnh mà nó đang được xem xét
+ Các mẫu thiết kế là phương thuốc cho các vấn đề đang được xem
xét
2 Tổng quan về mô hình thiết kế GOF
Tác giả của cuốn sách có tiêu đề là GOF này là nhóm 4 người gồm
có Erich Gamma, Richard Helm, Ralph Johnson và John Vlissides Vấn đề
trong cuốn sách liên quan đến các yếu tố của phần mềm hướng đối tượng
Trang 8có thể tái sử dụng, đã khởi xướng khái niệm về các mẫu thiết kế trong phát
triển phần mềm
Các mẫu Gang of Four (GoF) gồm 23 mẫu thiết kế phần mềm cổ
điển cung cấp các giải pháp cho các vấn đề phổ biến trong thiết kế phần
mềm Các mẫu này được phân loại thành hai loại chính:
+ Core Design Patterns
+ J2EE Design Patterns
Core Design Patterns được chia thành ba loại chính của mẫu thiết kế,
như sau:
+ Creational Design Pattern: các mẫu trong danh mục này cung cấp mộtcách để xây dựng các đối tượng khi các nhà thầu sẽ không phục vụ mục đích củabạn Logic sáng tạo của các đối tượng được ẩn Các chương trình dựa trên các mẫunày linh hoạt hơn trong việc quyết định tạo đối tượng theo yêu cầu của bạn và cáctrường hợp sử dụng của bạn cho ứng dụng
+ Structural Design Pattern: các mẫu trong danh mục này liên quan đếnthành phần của các lớp hoặc đối tượng Trong ứng dụng doanh nghiệp, có hai kỹthuật thường được sử dụng để tái sử dụng chức năng trong các hệ thống hướng đốitượng: một là kế thừa lớp và hai là khái niệm thành phần đối tượng của thừa kế háiniệm thành phần đối tượng của kế thừa được sử dụng để soạn thảo giao diện và xácđịnh các cách để soạn thảo các đối tượng để có được các chức năng mới
+ Behavioral Design Pattern: các mẫu trong danh mục này, đặc trưng chocác cách mà các lớp hoặc đối tượng tương tác và phân phối trách
8
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 9nhiệm Các mẫu thiết kế này đặc biệt quan tâm đến giao tiếp giữa các đối
tượng Mô hình thiết kế hành vi được sử dụng để kiểm soát và giảm luồng
ứng dụng phức tạp trong ứng dụng doanh nghiệp
Hơn nữa, JEE Design patterns, là loại chính khác của các mẫu thiết
kế Thiết kế ứng dụng có thể được đơn giản hóa vô cùng bằng cách áp
dụng các mẫu thiết kế Java EE Các mẫu thiết kế của Java EE đã được ghi
lại trong các bản thiết kế Java của Sun
Các mẫu thiết kế Java EE này cung cấp các hướng dẫn giải pháp
được thử nghiệm theo thời gian và các thực tiễn tốt nhất để tương tác đối
tượng trong các lớp khác nhau của ứng dụng Java EE Các mẫu thiết kế
này đặc biệt quan tâm đến các lớp được liệt kê sau:
+ Design pattern at the presentation layer
+ Design pattern at the business layer
+ Design pattern at the integration layer
3 Creational design patterns
Các mẫu thiết kế sáng tạo( Creational design patterns ) được liên kết
với phương pháp tạo đối tượng Logic tạo của đối tượng được ẩn cho người
gọi của đối tượng này
Cách này không phù hợp với một số trường hợp, bởi vì nó là một
cách tạo mã cứng để tạo ra một đối tượng Nó cũng không phải là một thực
tiễn tốt nhất để tạo ra một đối tượng bởi vì đối tượng có thể được thay đổi
theo bản chất của chương trình
Trang 10Do đó, mô hình thiết kế sáng tạo( Creational design patterns ) cung
cấp sự linh hoạt để tạo ra một đối tượng theo bản chất của chương trình
Factory design pattern
Xác định một giao diện để tạo một đối tượng, nhưng hãy để các lớp
con quyết định lớp nào sẽ khởi tạo Phương pháp này cho phép một lớp trì
hoãn việc khởi tạo cho các lớp con
Theo mẫu thiết kế nhà máy(Factory) này, ta nhận được một đối
tượng của một lớp mà không phơi bày logic cơ bản cho máy khách(client)
Nó gán một đối tượng mới cho người gọi bằng cách sử dụng một giao diện
chung hoặc lớp trừu tượng Điều này có nghĩa là mô hình thiết kế che giấu
logic thực tế của việc thực hiện một đối tượng, cách tạo nó và lớp nào khởi
tạo nó Chịu trách nhiệm cho các nhiệm vụ này Mô hình nhà máy(Factory)
là một trong những mẫu thiết kế được sử dụng nhiều nhất trong Java
Những lợi ích của mẫu thiết kế nhà̀ máy(Factory)
Mẫu nhà máy thúc đẩy khớp nối lỏng lẻo giữa các thành phần hoặc
lớp hợp tác bằng cách sử dụng các giao diện thay vì ràng buộc các lớp
dành riêng cho ứng dụng vào mã ứng dụng bằng cách sử dụng mẫu này
Ta có thể thực hiện một đối tượng của các lớp thực hiện giao diện,
khi chạy vòng đời đối tượng được quản lý bởi nhà máy được thực hiện bởi
mô hình này
Một số vấn đề chung nên sử dụng mẫu thiết kế nà̀y
+ Mẫu này loại bỏ gánh nặng cho nhà phát triển để tạo và quản lý các đối tượng
Trang 11+ Mẫu này loại bỏ sự kết hợp chặt chẽ giữa các thành phần cộng tác vì một thành phần không biết các lớp con nào sẽ được yêu cầu để tạo.
+ Tránh mã cứng để tạo một đối tượng của lớp
Thực thi mẫu nhà̀ máy(Factory) và̀o Spring Framework
Spring Framework sử dụng mẫu này để thực thi container(nơi chứa
đựng tất cả các beans) sử dụng giao diện BeanFactory và
ApplicationContext
Spring container hoạt động dựa trên mô hình nhà máy để tạo ra các
beans cho ứng dụng Spring và cũng như quản lý vòng đời của mỗi beans
BeanFactory và ApplicationContext là các giao diện nhà máy và
Spring có rất nhiều lớp thực hiện Phương pháp GetBean () là phương pháp
nhà máy cung cấp beans sao cho phù hợp
Abstract factory design pattern
Cung cấp một giao diện để tạo các mối liên hệ giữa các đối tượng
liên quan hoặc phụ thuộc mà không cần chỉ định các lớp cụ thể của nó
Đây là một mô hình thiết kế cao cấp so với mô hình thiết kế phương
pháp nhà máy Theo mẫu thiết kế này, bạn chỉ cần xác định một giao diện
hoặc lớp trừu tượng để tạo một đối tượng phụ thuộc có liên quan mà không
cần chỉ định lớp con cụ thể của nó
Trong mô hình nhà máy trừu tượng, một giao diện chịu trách nhiệm
tạo ra một nhà máy gồm các đối tượng liên quan mà không chỉ định rõ
ràng các lớp của chúng Mỗi nhà máy được tạo ra có thể cung cấp cho các
đối tượng theo mẫu nhà máy
Trang 12Những lợi ích của mô hình nhà̀ máy trừu tượng(Abstract
factory)
+ Cung cấp khớp nối lỏng lẻo giữa các thành phần liên quan Nó cũng cách
ly mã máy khách(client) với các lớp cụ thể
+ Mô hình thiết kế này là một thiết kế cấp cao hơn mô hình nhà máy
+ Mẫu này cung cấp tính nhất quán tốt hơn trong thời gian xây dựng của cácđối tượng trên toàn ứng dụng
+ Mô hình này dễ dàng hoán đổi các thành phần liên quan
Một số vấn đề chung nên sử dụng mẫu thiết kế
nà̀y(Abstract factory)
Khi bạn thiết kế một mẫu nhà máy để tạo đối tượng trong ứng dụng
của bạn, có những lúc bạn muốn một tập hợp các đối tượng liên quan cụ
thể được tạo với các ràng buộc nhất định và áp dụng logic mong muốn trên
các đối tượng liên quan trong ứng dụng của bạn Bạn có thể đạt được thiết
kế này bằng cách tạo một nhà máy khác bên trong nhà máy cho một bộ các
đối tượng liên quan và áp dụng các ràng buộc cần thiết Bạn cũng có thể
lập trình logic cho một tập hợp các đối tượng liên quan
Khi bạn muốn tùy chỉnh logic khởi tạo của các đối tượng liên quan,
thì bạn có thể sử dụng mẫu thiết kế này
Thực thi mẫu nhà̀ máy trừu tượng(Abstract Factory) và̀o
Spring Framework
Trong Spring Framework, giao diện FactoryBean dựa trên mô hình
thiết kế Abstract Factory, Spring cung cấp nhiều phương thức thực thi giao
diện này, chẳng hạn như là ProxyFactoryBean, Jndi Factory Bean,
Trang 13LocalContainerEntityManagerFactoryBean, và một số khác
Một FactoryBean cũng hữu ích để giúp xây dựng đối tượng Spring
mà bản thân nó không dễ dàng tự xây dựng được.Thường thì điều này
được sử dụng để xây dựng các đối tượng phức tạp có nhiều phụ thuộc Nó
cũng có thể được sử dụng khi bản thân logic xây dựng rất biến động và
phụ thuộc vào cấu hình
Singleton design pattern
Đảm bảo một lớp chỉ có một trường hợp và cung cấp một điểm truy
cập toàn cầu cho nó
Mẫu singleton này là một trong những mẫu thiết kế đơn giản nhất
trong Java.Theo mẫu thiết kế này, lớp cung cấp cùng một đối tượng cho
mỗi cuộc gọi-nghĩa là nó đang hạn chế việc khởi tạo một lớp cho một đối
tượng và cung cấp một điểm truy cập toàn cầu vào lớp đó
Vì vậy, lớp sẽ chịu trách nhiệm tạo một đối tượng và cũng đảm bảo
rằng chỉ nên tạo một đối tượng cho mỗi cuộc gọi của khách hàng(client)
cho đối tượng này
Lớp này không cho phép khởi tạo trực tiếp một đối tượng của lớp
này Nó cho phép có được một thể hiện đối tượng chỉ bằng một phương
thức tĩnh được tiếp xúc
Điều này rất hữu ích khi chính xác một đối tượng là cần thiết để phối
hợp các hành động trên hệ thống Bạn có thể tạo một mẫu duy nhất bằng
hai biểu mẫu, như được liệt kê ở đây:
Trang 14+ Early instantiation: Tạo phiên bản vào thời điểm tải.
+ Lazy instantiation: Tạo phiên bản khi được yêu cầu
Những lợi ích của mô hình Singleton
+ Nó cung cấp quyền truy cập bộ điều khiển vào các lớp quan trọng (thường
là đối tượng nặng), chẳng hạn như lớp kết nối cho DB và lớp sessionFactory trongHibernate
+ Nó giúp tiết kiệm hàng đống bộ nhớ
+ Nó là một thiết kế rất hiệu quả cho môi trường đa luồng
+ Nó linh hoạt hơn vì lớp kiểm soát quá trình khởi tạo và lớp có tính linh hoạt để thay đổi quá trình khởi tạo
+ Nó có độ trễ thấp
Một số vấn đề chung nên sử dụng mẫu thiết kế
nà̀y(Singleton)
Mẫu Singleton chỉ giải quyết được một vấn đề nếu bạn có một tài
nguyên chỉ có thể có một thể hiện duy nhất và bạn cần quản lý trường hợp
đó, thì bạn cần một singleton
Thông thường, nếu muốn tạo kết nối cơ sở dữ liệu với cấu hình đã
cho trong môi trường phân phối và đa luồng, nếu không tuân theo thiết kế
singleton thì mọi luồng có thể tạo kết nối cơ sở dữ liệu mới với một đối
tượng cấu hình khác
Với mẫu singleton, mỗi luồng có cùng đối tượng kết nối cơ sở dữ
liệu với cùng một đối tượng cấu hình trên hệ thống Nó chủ yếu được sử
dụng trong các ứng dụng đa luồng và cơ sở dữ liệu Nó được sử dụng trong
ghi nhật ký, lưu trữ, nhóm luồng, cài đặt cấu hình,
Trang 15Thực thi mẫu Singleton và̀o Spring Framework
Spring Framework cung cấp một phạm vi singleton bean như là mô hìnhsingleton, nó tương tự mẫu singleton, nhưng không giống hẳn singleton trong java.Theo mẫu singleton, một phạm vi bean trong Spring framework có nghĩa là một beanduy nhất trên mỗi container và mỗi bean Nếu bạn xác định một bean cho một lớp cụthể trong một Spring container, thì sẽ tạo một và chỉ một thể hiện của lớp được xácđịnh bởi định nghĩa bean đó
Prototype design pattern
Chỉ định loại đối tượng để tạo bằng cách sử dụng một thể hiện nguyên
mẫu và tạo các đối tượng mới bằng cách sao chép nguyên mẫu này
Mẫu này được sử dụng để tạo các đối tượng bằng cách sử dụng
phương thức nhân bản của các đối tượng Nó được xác định bởi một ví dụ
nguyên mẫu Trong ứng dụng doanh nghiệp, việc tạo đối tượng là tốn kém
về mặt tạo và khởi tạo các thuộc tính ban đầu của các đối tượng Nếu một
loại đối tượng như vậy đã có trong tay, thì ta sẽ tìm mẫu prototype này
Bạn chỉ cần sao chép một đối tượng tương tự hiện có thay vì tạo nó, đó là
tốn thời gian
Mẫu này liên quan đến việc thực hiện giao diện nguyên mẫu, nó tạo
ra một bản sao của đối tượng hiện tại Mẫu này được sử dụng khi tạo trực
tiếp đối tượng là tốn kém
Những lợi ích của mô hình Prototype
+ Giảm thời gian để tạo các đối tượng tốn thời gian
+ Mô hình này làm giảm lớp con
+ Mẫu này thêm và xóa các đối tượng trong thời gian chạy
+ Mẫu này cấu hình ứng dụng với các lớp một cách linh hoạt
Trang 16Builder design pattern
Tách biệt việc xây dựng một đối tượng phức tạp khỏi biểu diễn của
nó để quá trình xây dựng tương tự có thể tạo ra các biểu diễn khác nhau
Logic và quá trình tạo đối tượng phải là chung để bạn có thể sử dụng
nó để tạo các triển khai cụ thể khác nhau của cùng loại đối tượng Mẫu này
đơn giản hóa việc xây dựng các đối tượng phức tạp và nó ẩn các dựng
được sử dụng để xây dựng một đối tượng phức tạp từng bước và cuối cùng
nó sẽ trả về đối tượng hoàn chỉnh chi tiết về cấu trúc của đối tượng từ mã
người gọi máy khách
Khi bạn đang sử dụng mẫu này, hãy nhớ rằng bạn phải xây dựng nó
từng bước một, điều đó có nghĩa là bạn phải chia đăng nhập xây dựng đối
tượng thành nhiều giai đoạn, không giống như các mẫu khác, chẳng hạn
như nhà máy trừu tượng và mẫu nhà máy, mà đối tượng trong một bước
duy nhất
Những lợi ích của mô hình Prototype
+ Mô hình này cung cấp cho bạn sự cô lập hoàn toàn giữa việc xây dựng và biểu diễn của một đối tượng
+ Mẫu này cho phép bạn xây dựng đối tượng theo nhiều giai đoạn, vì vậy bạn có quyền kiểm soát nhiều hơn đối với quy trình xây dựng
+ Mẫu này cung cấp sự linh hoạt để thay đổi biểu diễn bên trong của đối tượng
Thực thi mẫu Singleton và̀o Spring Framework
Spring Framework thực hiện mô hình thiết kế xây dựng(builder) một
cách minh bạch trong một số chức năng Các lớp sau dựa trên mẫu thiết kế
Trang 17xây dựng(builder) trong Spring Framework:
Trong một ứng dụng doanh nghiệp, bạn có thể áp dụng mẫu trình xây
dựng trong đó việc tạo đối tượng đã được thực hiện bằng cách sử dụng
nhiều bước Trong mỗi bước, bạn thực hiện một phần của quy trình Trong
quy trình này, bạn đặt một số tham số cần thiết và một số tham số tùy chọn
và sau bước cuối cùng, bạn sẽ nhận được một đối tượng phức tạp
Mẫu builder là một mẫu thiết kế phần mềm tạo đối tượng Mục đích
là để trừu tượng các bước xây dựng để các triển khai khác nhau của các
bước này có thể xây dựng các biểu diễn khác nhau của các đối tượng
Thông thường, mẫu xây dựng được sử dụng để xây dựng các sản phẩm
theo mẫu tổng hợp
Trang 183 Consideration of Structural and Behavioral
Patterns
Tiếp tục các phần tiếp theo của GOF design pattern đó là structural and behavioral design patterns
1 Phân tích cốt lõi của mẫu thiết kế
● Structural design pattern: các mẫu trong danh mục này sẽ đảm
nhiệm các thành phần của các class hoặc các đối tượng
● Trong phần mềm doanh nghiệp thì có 2 kĩ thuật cơ bản để tái sử dụng các chức năng của hệ thống hướng đối tượng đó là:
o Inheritance (Kế thừa): kế thừa các trạng thái và biểu hiện của
class khác
o Composition: Được sử dụng như là các thành phần của các đối
tượng khác như một biến của class, Thành phần hóa các đối tượng để nhận các tính năng
● Behavioral design pattern: các mẫu trong danh mục này nêu rõ đặc
điểm và các cách thức để các class và object tương tác với nhau và đóng gópnhiệm vụ Các mẫu này xác định các phương thức để mà giao tiếp giữa cácobject với nhau trong phần mềm Giảm thiểu độ
phức tạp của luồng điều khiển, đóng gói các thuật toán và linh hoạt trong việc chọn 1 trong số các thuật toán để sử dụng
Trang 19- 2 class không thể làm việc chung do không tương thích interface
- Mẫu adaper được sử dụng khi 2 interface trong phần mềm không tương thích chức năng nhưng vẫn có thể tích hợp với nhau được
Lợi ích của mẫu Adapter
- Cho phép giao tiếp và tương tác được với 2 hay nhiều object không tương thích nhau
- Phát triển khả năng tái sử dụng các chức năng đã triển khai trong phần mềm
Yêu cầu chung khi dùng mẫu Adapter
- Phải có sẵn class với interface không tương thích
- Dùng adapter pattern khi muốn tạo 1 class mà có thể kết hợp với các class khác không tương thích nhau
- 1 object của adapter có thể mô phỏng interface của class cha
Triển khai mẫu Adapter trên Spring Framework
- Spring framework sử dụng các mẫu adapter để triển khai ra nhiều chức năng tách biệt của framework
- The Target Interface: giao diện cho clients
Trang 20- The Adapter class: Là class bọc bên ngoài triển khai các interface mong muốn và chỉnh sửa yêu cầu có trong class Adapee
- The Adaptee class: Class được class Adapter sử dụng để tái sử dụng chức năng và chỉnh sửa chức năng sử dụng
- Client: Class này sẽ giao tiếp với Adapter class
Mẫu cầu nối
- Mẫu bridge cho ta 1 cách thức để giao tiếp giữa 2 phần tử độc lập nhau
- Phân tách abstract class và implementer class
- Bridge pattern sử dụng 1 interface như là cầu nối giữa các class vàabstract class và các class đang triển khai interface Dễ dàng thay đổi chúng màkhông ảnh hưởng đến mã nguồn của client
Lợi ích của mẫu cầu nối
- Cho phép phân tách các triển khai và các lớp thuần ảo
- Linh hoạt trong việc thay đổi không ảnh hưởng code bên ngoài client
- Che giấu các triển khai không cho client thấy bằng cách chỉ cho client sửdụng các lớp abstract
Trang 21Các vấn đề thường thấy đã bị loại bỏ khi áp dụng mẫu cầu
- Xóa đi các liên kết giữa các chức năng ảo hóa và triển khai của nó
- Dễ dàng thay đổi các lớp đang triển khai mà không ảnh hưởng client
- Mở rộng abstraction và các triển khai bằng các lớp con
Triển khai mẫu cầu nối trong Spring Framework
Các module spring dưới đây là dựa vào mẫu bridge:
- ViewRenderServlet: Là bridge servlet, sử dụng cho hỗ trợ Portlet MVC
- Mẫu cầu nối: The Bridge design pattern được sử dụng trong tiến trình
Spring logging
Mẫu composite
- Các object trong hệ thống được gom trong cấu trúc cây, cấu trúc cây là
sự liên kết của các nút lá và nhánh
Các vấn đề thường thấy được giải quyết bằng mẫu composite
- Mẫu Composite cho phép ta thiết kế các object để sử dụng các object nàynhư là 1 thành phần của các object khác và là 1 object riêng lẻ khác
- Tạo ra cấu trúc cây có thứ bậc rõ ràng để cung cấp client với cách sử
Trang 22dụng tương tự nhau
Cấu trúc UML của mẫu composite
Mẫu composite dựa trên thành phần của cấu trúc cây, cây có 3 phần
là nhánh, node và lá
- Component: là nhánh của cây, 1 nhánh thường có nhiều nhánhnhỏ, nút, lá khác Component cung cấp sự trừu tượng cho tất cả thành phần baogồm cả composite object Trong mẫu Composite, component là interface củacác đối tượng
- Leaf: là object triển khai các phương thức của component
- Composite: Là node của cấu trúc cây, nó có nhiều node khác và
lá khác Nó có các method để thêm con như là một collection có cùng 1 kiểuobject, nó bao gồm nhiều phương thức component cho con
Lợi ích của mẫu composite
- Cung cấp tính linh hoạt trong việc thêm component trong tiến trình, và thay đổi trong các component hiện có
- Cho phép tạo class có lớp cấp bậc rõ ràng bao gồm các object riêng rẻ vàcác object hỗn hợp
22
Trang 23Mẫu decorator
- Decoratior design pattern cho phép thêm và loại bỏ các hành vi của cácobject trong quá trình runtime một cách linh hoạt hoặc tĩnh mà không cần thayđổi hành vi hiện có của các object từ cùng 1 class
- Chia chức năng thành các concrete class
Lợi ích của mẫu decorator
- Mở rộng chức năng một cách linh hoạt và tĩnh mà không phải thay đổi cấu trúc của các object hiện có
- Thêm linh hoạt các nhiệm vụ mới cho 1 object
- Mẫu decorator còn được biết đến như là Warper
- Sử dụng các thành phần cho các quan hệ của các object để duy trì
Trang 24Các lớp và đối tượng tương tác với nhau:
- Component (Account): Là interface của các object có trách nhiệm thêm một cách linh hoạt
- ConcreteComponent (SavingAccount): là concrete class của componentinterface và nó khai báo 1 object mà trách nhiệm thêm có thể được đính vào
- Decorator (AccountDecorator): Liên quan đến component object và khai báo interface phù hợp
- ConcreteDecorator (SeniorCitizen and Privilege): là triển khai concrete của mẫu decorator và nó thêm trách nhiệm đến các component
Mẫu Facade
Lợi ích của mẫu Facade:
- Giảm thiểu tính phức tạp cho client khi tương tác với các hệ thống con
- Mẫu này kết hợp tất cả bussiness service như là một interface để dễ dànghiểu rõ
- Mẫu giảm thiểu các phụ thuộc của mã nguồn client trong phần làm việccủa hệ thống
Nhân biết được khi cần sử dụng mẫu facade
Ví dụ bạn cần phát triển một phần mềm bank cho doanh nghiệp vớinhiều service để làm việc bạn cần (AccountService, TranferService), Mãnguồn của client sẽ tương tác với tất cả service này để chuyển tiền từ tàikhoản này sang tài khoản khác
24
Trang 25Mã nguồn client trực tiếp tương tác với các class trong hệ thống con,
có thể mô tả 1 hoặc nhiều interface giúp cho hệ thống con dễ sử dụng hơn
Mẫu ủy quyền
- Cung cấp 1 đối tượng của 1 class với chức năng của tất cả class còn lại cần tới nó
- Mục đích của mẫu là cung cấp một class thay thế cho class khác, đi cùngvới đó là chức năng
Trang 26Mục đích của mẫu ủy quyền
- Mẫu Proxy ẩn giấu object xử lí không cho bên ngoài xem được
- Tạo object theo nhu cầu nên có thể nâng cao hiệu suất
Cấu trúc UML của mẫu ủy quyền
- Subject: Interface thật sự được triển khai bởi mẫu Proxy và RealSubject
- RealSubject: Thực tế việc triển khai Subject, là một object thật sự rằng được đại diện bởi Proxy
- Proxy: Nó là một proxy object và nó cũng là triển khai của object thật sự của Subject, nó duy trì việc giới thiệu đến object thật sự
Mẫu xâu chuỗi nhiệm vụ
- Mẫu chain of responsibility thuộc mẫu thể loại behavioral từ GOF
Trang 27- Sender và receivers của request được tách ra, sender gửi request đến chuỗi của receivers và 1 trong số receiver object có thể đảm nhận request
Lợi ích của mẫu Chain of Responsibility:
- Giảm thiểu sự liên kết giữa sender và receiver object trong hệ thống để giải quyết request
- Mềm dẻo trong việc xử lí các object được tham chiếu
- Tạo một chuỗi object sử dụng tính thành phần, và tập các object này làmviệc như một đơn vị duy nhất
- Handler: Là lớp ảo hoặc interface của hệ thống để xử lí request
- ConcreteHandler: Là các concrete class mà thực thi những xử lí
request, hoặc đưa request đến phiên xử lí tiếp theo
- Client: lớp ứng dụng để khởi tạo nên request cho các object xử lí
request trong chuỗi
Mẫu yêu cầu
- Đóng gói request data trong 1 object và đưa các object đó như là mệnh lệnh tới phương thức, trả về là mệnh lệnh là 1 object
- Cho phép truyền data như là object giữa các phần tử trong hệ thống người gửi và nhận
- Cho phép tham số hóa các object bởi action
Trang 28- Thêm các lệnh trong hệ thống mà không phải thay đổi class hiện tại
- Command: Là interface hoặc lớp ảo có 1 action để xử lí hệ thống
- ConcreteCommand: Là triển khai concrete của command interface và tạo action
- Client: Là class main, tạo ra một Concrete command object và gán cho receiver
- Invoker: Là Caller để kích request tới command object
- Receiver: Là phương thức xử lí mà hiện thực các hoạt động bởi
concrete command
Mẫu thông dịch viên
Mẫu interpreter cho phép bạn thông dịch một thể hiện ngôn ngữ
trong lập trình để khởi tạo một bản trình bày
- Cho phép thay đổi và kế thừa grammar dễ dàng
- Sử dụng ngôn ngữ tự nhiên rất dễ
Trang 29- AbstractExpression: Là interface để thực thi nhiệm vụ bởi sử dụng interpreter operation
- AbstractExpression: Là các triển khai của interface và nó triển khai hàminterpret()
- NonterminalExpression: là triển khai của phần còn lại của interface và nótriển khai interpret() operation
- Context: Là chuỗi operation và nó bao gồm thông tin cục bộ cho thông dịch
- Client: Là class main để hành xử operation thông dịch
Mẫu trình lặp lại
- Dễ dàng truy cập các item trong collection
- Có thể truy cập nhiều item cùng lúc từ collection bởi vì nó hỗ trợ nhiều các biến thể
- Cung cấp một uniform interface để vượt qua nhiều cấu trúc khác nhau trong collection
Trang 30- Iterator: Là interface hoặc lớp ảo để truy cập các items của collection
- ConcreteIterator: Là triển khai của Iterator interface
- Aggregate: Là interface để tạo ra iterator object
- ConcreteAggregate: Là triển khai của Aggregate interface, nó triển khaihàm tạo Iterator interface để trả về là instance của ConcreteIterator thích hợp
Mẫu bản mẫu
Trong mẫu template, một lớp ảo sẽ bao gói các khởi tạo vào method.Method đó sẽ cho phép kế thừa không được sửa method này Có thể sửdụng concrete class trong phần mềm bạn để hành xử một số loại hànhđộng
Lợi ích việc sử dụng mẫu template:
- Giảm thiểu code bản mẫu trong phần mềm bằng việc sử dụng lại code
- Mẫu tạo ra một số template hoặc cách thức để sử dụng lại nhiều thuật toán để hiện thực các yêu cầu bài toán
30
Trang 31- AbstractClass: Là lớp ảo bao gồm các method của template là xương sống của thuật toán
- ConcreteClass: Là concrete class con của AbstractClass triển khai các hoạt động của thuật toán
2 Mẫu thiết kế J2EE
Mẫu thiết kế của Java EE cung cấp phương pháp kiểm thử và luyệntập cho các tương tác của object trong nhiều tầng khác nhau của ứng dụng.Bao gồm 3 phân lớp
· Mẫu thiết kế của tầng presentation
· Mẫu thiết kế của tầng business (xử lý login)
· Mẫu thiết kế của tầng integration
Mẫu thiết kế của tầng trình bà̀y:
· View helper: Nó phân tách các view từ business logic của ứng dụng J2EE doanh nghiệp
· Front Controller: Cung cấp một điểm hành động để đảm nhiệm cácrequest đến ứng dụng J2EE, đưa các request đến các controller để truy cập