Design patterns (tiếp)
Bài đăng này đã không được cập nhật trong 3 năm
Bài viết được dịch từ các bài giới thiệu về Design Pattern của trang web Tutorial Point, và là phần tiếp theo của bài này.
Các loại Design Pattern
Bridge Pattern
Bridge pattern được sử dụng khi chúng ta muốn tách một abtraction từ implementation của nó để cả hai có thể thay đổi một cách độc lập với nhau. Đây là một pattern thuộc kiểu structural pattern, nó tách implementation class và abstract class bằng cách tạo ra một cầu nối giữa hai thứ.
Pattern này liên quan tới một interface có tác dụng như một cầu nối để làm cho các tính năng của concrete class độc lập với với class đã implement interface này. Cả hai class có thể được chỉnh sửa một cách hệ thống mà không ảnh hưởng tới tới cái còn lại.
Chúng ta sẽ thử làm theo Bridge pattern thông qua ví dụ sau đây, trong đó một hình tròn có thể được vẽ với nhiều mau khác nhau bằng cách sử dụng chung một abstract class nhưng implement các bridge class khác nhau.
Cách thực hiện
Chúng ta có interface DrawAPI
có tác dụng như một implementer cầu nối và các concrete class RedCircle
, GreenCircle
implement interface DrawAPI
. Shape
là một abstract Class và sẽ sử dụng object của DrawAPI
. Demo class BridgePatternDemo
sẽ sử dụng class Shape
để vẽ các vòng tròn có màu khác nhau.
- Tạo một bridge implementer interface tên là
DrawAPI
- Tạo các concrete bridge implementer class và implement interface
DrawAPI
. - Tạo một abstract class
Shape
và sử dụng interfaceDrawAPI
- Tạo một concrete class và class này implement inteface
Shape
- Tạo demo class sử dụng class
Shape
vàDrawAPI
để vẽ các vòng tròn có màu khác nhau. - Kiểm tra kết quả.
Filter Pattern
Filter pattern hay Criteria pattern là một design pattern cho phép lập trình viên lọc một tập hợp các object sử dụng chuỗi các điều kiện khác nhau, tách biệt nhau, và thông qua các phép toán logic. Design pattern này thuộc kiểu structural pattern, pattern này kết hợp nhiều điều kiện để thu được một tiêu chuẩn duy nhất.
Cách thực hiện
Chúng ta sẽ tạo ra một object Person
, interface Criteria
và các concrete class implement interface này để lọc ra danh sách các object Person. Demo class CriteriaPatternDemo sử dụng các objects Criteria
để lọc ra danh sách các Person
object dựa trên nhiều các tiêu chuẩn khác nhau và sự kết hợp của giữa các tiêu chuẩn này.
- Tạo một class Person để sử dụng các criteria (tiêu chuẩn)
- Tạo một interface Criteria
- Tạo các concrete class implement interface Criteria ví dụ như
CriteriaMale
,CriteriaFemale
,CriteriaSingle
,AndCriteria
,OrCriteria
- Sử dụng các Criteria khác nhau và kết hợp chúng lại để lọc ra các person.
- Kiểm tra kết quả.
Composite Pattern
Composite pattern được sử dụng khi chúng ta cần xử lý một nhóm các object theo các giống như đối với một object đơn lẻ. Composite pattern kết hợp các object theo một cấu trúc dạng cây để biểu diễn một phần cũng như toàn bộ các tầng. Đây là một structural pattern, pattern này tạo ra một cấu trúc dạng cây của nhó các object.
Pattern này tạo ra một class bao gồm một nhóm của các object của chính nó. Class này cũng cấp các phương thức để sửa đổi một nhóm các object giống nhau.
Chúng ta sẻ biểu diễn cách sử dụng của composite pattern thông qua ví dụ sau đây, hiển thị các cấp nhân viên của một tổ chức.
Cách thực hiện
Chúng ta có một class Employee, có tác dụng như một actor class của composite pattern. Demo class của chúng ta CompositePatternDemo
sẽ sử dụng Employee
class để thêm các cấp phòng ban và in ra tất cả các nhân viên.
- Tạo ra class Employee.java có một danh sách các object Employee
- Sử dụng class Employee để tạo và in ra các tầng employee.
- Kiểm tra kết quả.
Decorator Pattern
Decorator pattern cho phép người dùng có thể thêm các tính năng khác vào một object có sẵn mà không thay đổi cấu trúc của nó. Đây là một structural pattern và có hành xử như một phần gói bên ngoài một class có sẵn.
Pattern này tạo ra một decorator class, bao quanh class gốc và cung cấp các tính năng bổ sung giữ cho các methods khác của class không bị ảnh hưởng.
Chúng ta sẽ trình diễn cách sử dụng decorator pattern thông qua ví dụ sau đây, trong đó ta sẽ trang trí thêm vài màu sắc cho Shape mà không cần thiết phải sửa đổi class Shape.
Cách thực hiện
Chúng ta sẽ tạo ra một interface Shape
và các concrete class implement interface Shape. Chúng ta sẽ tạo một abstract class decorator tên là ShapeDecorator
, class này implement interface Shape
và có instance variable là một Shape
object.
RedShapeDecorator
là concrete class implement ShapeDecorator
DecoratorPatternDemo
, class demo của chúng ta sẽ sử dụng RedShapeDecorator
để trang trí cho object Shape
.
- Tạo ra interface Shape với method
draw
. - Tạo ra các concrete class như là
Rectangle
,Circle
cùng implement interface này. - Tạo ra abstract class decorator
ShapeDecorator
, class này implement interfaceShape
- Tạo ra concrete decorator class extend class
ShapeDecorator
- Sử dụng
RedShapeDecorator
để trang trí objectShape
- Kiểm tra output
Facade Pattern
Facade pattern ẩn đi sự phức tạp của hệ thống và cung cấp một interface để client có thể truy nhập vào hệ thống đó. Đây là một structural pattern.
Pattern này liên quan tới một class đơn, class này cung cấp các method đơn giản được yêu cầu bởi client và gọi tới các method của các class trong hệ thống đã có.
Cách thực hiện
Chúng ta sẽ tạo ra một interface tên là Shape và các concrete class implement interface Shape
. Một class ShapeMaker
sẽ được định nghĩa và class này sử dụng các concrete class để đại diện cho việc user gọi đến các class này. Demo class FacadePatternDemo
sẽ sử dụng ShapeMaker
class to show the results.
- Tạo ra interface
Shape
với methoddraw
. - Tạo ra các concrete class implement interface
Shape
, ví dụ nhưRectangle
,Square
,Circle
. - Tạo một facade class có tên là
ShapeMaker
- Trong demo class
FacadePatternDemo
, sử dụng facade class này để vẽ các kiểu shape khác nhau. - Kiểm tra kết quả.
Flyweight Pattern
Flyweight pattern có mục đích chính là giảm thiểu số lượng objects được tạo ra cũng như hạn chế sử dụng memory để tăng performance. Đây là một structural pattern, pattern này cung cấp những phương pháp giúp bạn giảm số lượng object và cải thiện cấu trúc object của application.
Flyweight pattern sẽ tìm kiếm và tái sử dụng những object tương tự với object cần dùng bằng cách lưu chúng vào nơi nào đó và chỉ tạo ra object mới khi không tìm thấy object tương ứng nào khác. Chúng ta sẽ trình diễn cách sử dụng pattern này bằng việc vẽ ra 20 hình tròn ở các vị trí khác nhau nhưng ta chỉ tạo ra 5 object. Chỉ có 5 màu nên trường color
sẽ được sử dụng để kiểm tra xem có Circle object tương tự nào có sẵn không.
Cách thực hiện
Chúng ta sẽ tạo ra một interface Shape
và concrete class Circle
, class này implement interface trên. Trong bước tiếp theo ta sẽ định nghĩa factory class ShapeFactory
.
ShapeFactory
có một HashMap
của Circle
sử dụng key là màu của object Circle
. Mỗi khi có một request gửi yêu cầu tạo ra một Circle với một màu nào đó tới ShapeFactory
, nó sẽ kiểm tra màu của circle object trên HashMap của nó, nếu object được tìm thấy nó sẽ trả về, ngược lại một một object mới sẽ được tạo ra và lưu trong hash map để sử dụng trong tương lai.
FlyWeightPatternDemo, demo class này sẽ sử dụng ShapeFactory
để lấy về một object Shape
. Nó sẽ gửi thông tin (đỏ / xanh lá cây / xanh dương / đen / trắng ) tới ShapeFactory
để lấy về hình tròn có màu sắc nó cần.
- Tạo ra một interface
Shape
có phương thứcdraw
- Tạo ra concrete class
Circle
implement interfaceShape
- Tạo ra một factory để có thể tự sinh object của concrete class dựa vào thông tin được truyền, sử dụng method
getCircle
. - Sử dụng factory để lấy object của concrete class bằng cách gửi thông tin về màu sắc.
- Kiểm tra kết quả
(Vẫn còn tiếp)
All rights reserved