Chào các e, chủ đề hôm nay của anh sẽ bàn về chủ đề Design Pattern
Design Pattern là một giải pháp cho một vấn đề chung trong thiết kế phần mềm . Nó mô tả cách giải quyết một vấn đề được lập đi lập lại nhiều lần. A lấy ví dụ về giải pháp khi mình thay đổi giá trị trong database thì nó tự động cập nhập giá trị đó lên các giao diện ứng dụng khác nhau như mobile , web, tivi cùng một lúc. Để giải quyết được vấn đề đó thì người ta áp dụng MVC pattern để giải quyết vấn đề. Như vậy người ta áp dụng design pattern để giải quyết cho những vấn đề gặp phải ở nhiều tình huống khác nhau. Ngoài ra có có một chức năng cực quan trọng là khi áp dụng design pattern khả năng mở rộng các chức năng ứng dụng rất cao. Ta không phải đập hết code củ để viết lại cái mới mà thay vào đó ta chỉ tạo thêm các Class mới và không xoá đi code củ.
Design Pattern được chia làm 3 mục chính là : Creational Pattern ( nhóm khởi tạo), Structural (nhóm cấu trúc) và Behavioral patterns (nhóm hành vi ) .
Creational Pattern ( nhóm khởi tạo): Nhóm này sẽ giúp bạn rất nhiều trong việc khởi tạo đối tượng. Nó gồm các design pattern sau. Mỗi loại design sẽ ứng với một mục đích khác nhau. Ứng dụng mỗi design pattern sẽ được miêu tả chi tiết và cụ thể trong các bài viết trong blog.
Vậy khi nào chúng ta dùng design pattern cho nhóm khởi tạo. Khởi tạo ở đây là việc tạo ra một đối tượng. Tại sao trong lập trình mình có thể dùng toán tử new để khai báo ra một đối tượng luôn. Dùng design pattern creation để làm gì? Câu trả lời rất đơn giản, chúng ta hoàn toàn có thể dùng từ khóa new để tạo ra đối tượng, nhưng ứng dụng của chúng ta sẽ không thể mở rộng trong tương lai. Nhiều lúc khi phát triển tính năng mới ta phải đập hết code củ và viết lại một chức năng mới. Trong 10 cách tạo đối tượng ở trên mỗi pattern sẽ có một vai trò, mục đích khác nhau. Tuỳ vào nghiệp vụ của chương trình mà ta có thể chọn pattern đúng để tạo ra các đối tượng giúp cho việc mở rộng sau này được dễ dàng.
Structural (nhóm cấu trúc): Nhóm này sẽ giúp chúng ta thiết lập, định nghĩa quan hệ giữa các đối tượng. Cấu trúc để tạo đối tượng, chúng ta có 11 design pattern cho việc cấu trúc một đối tượng.
Khi nói về cấu trúc của một đối tượng và cách mình tạo ra cấu trúc đó như thế nào thì mình sẽ sử dụng Structural Pattern. Anh lấy ví dụ như mình có ứng dụng là xây dựng cây gia phả của họ hàng mình như sau.
Như vậy mình phải tìm một cấu trúc để lưu trữ cây gia phả cho hợp lý, có nghĩa là mình dễ dàng thêm, sửa, xóa các node trong cây gia phả. Như vậy ta phải tìm ra một cấu trúc linh hoạt, và trong trường hợp này mình dùng Composite design pattern để tạo ra cấu trúc lại các đối tượng trong chức năng của mình.
Behavioral patterns (nhóm hành vi): Nhóm này sẽ tập trung thực hiện các hành vi của đối tượng. Chúng ta có các design pattern sau.
Chúng ta sử dụng Behavior pattern khi chúng ta tập trung vào việc xử lý các hành động, và dự đoán trước rằng các hành động này sẽ được thay đổi trong tương lai. Anh lấy ví dụ như trong các collection của java mình có các tập hợp như List, Set. Các tập hợp này đều có sẵn hàng duyệt các phần tử. Nhưng nếu cũng trong ứng dụng của anh có thêm mảng []. Thì cái mảng này các duyệt các phần tử khác với cách thức của List và Set. Như vậy anh phải suy nghỉ viết ra một pattern mà khi a truyền vào là mảng [], list, hay map. Thì nó đều lấy được các phần tử như nhau và dùng 1 phương thức như nhau. Trong thực tế thì anh sẽ sử dụng Iterator và hành động của anh là duyệt qua các phần tử. Không quan tâm đầu vào nó là gì.
Như các em thấy hầu hết các framework mà chúng ta đang dùng đều xây dựng dựa trên các design pattern. Vì nó có khả năng mở rộng cao. Ứng với từng mục đích, từng bài toán mà ta sẽ sử dụng pattern tương ứng để giải quyết vấn đề.