Tóm Tắt
Design Patterns là gì? Tại sao nên sử dụngDesign Patterns?
Design Patterns là một kỹ thuật trong lập trình hướng đối tượng, nó khá quan trọng và mọi lập trình viên muốn giỏi đều phải biết. Được sử dụng thường xuyên trong các ngôn ngữ OOP. Nó sẽ cung cấp cho bạn các “mẫu thiết kế”, giải pháp để giải quyết các vấn đề chung, thường gặp trong lập trình. Các vấn đề mà bạn gặp phải có thể bạn sẽ tự nghĩ ra cách giải quyết nhưng có thể nó chưa phải là tối ưu. Design Patterns giúp bạn giải quyết vấn đề một cách tối ưu nhất, cung cấp cho bạn các giải pháp trong lập trình OOP.
Bạn đang xem: Các design pattern thông dụng
Design Patterns không phải là ngôn ngữ cụ thể nào cả. Nó có thể thực hiện được ở phần lớn các ngôn ngữ lập trình, chẳng hạn như Java, C#, thậm chí là Javascript hay bất kỳ ngôn ngữ lập trình nào khác.
Lý do nên sử dụngDesign Patterns
Design pattern giúp cho dự án Bất Động Sản của tất cả chúng ta dễ bảo dưỡng, tăng cấp và lan rộng ra. Hơn nữa do design pattern đã được những nhà nghiên cứu đúc rút ra nên khi sử dụng design pattern thì tất cả chúng ta sẽ hạn chế được những lỗi tiềm ẩn. Và ở đầu cuối là khi sử dụng design pattern thì sẽ giúp code của tất cả chúng ta sẽ dễ đọc hơn. Điều này rất có lợi khi thao tác nhóm .
Các loại design patterns.
Năm 1994, bốn tác giảErich Gamma, Richard Helm, Ralph Johnson và John Vlissidesđã cho xuất bản một cuốn sách với tiêu đềDesign Patterns – Elements of Reusable Object-Oriented Software, đây là khởi nguồn của khái niệm design pattern trong lập trình phần mềm.
Hệ thống các mẫu Design pattern hiện có23mẫuđược định nghĩa trong cuốn “Design patterns Elements of Reusable Object Oriented Software” và được chia thành3 nhóm:
Creational Pattern(nhóm khởi tạo – 5 mẫu) gồm:Factory Method,Abstract Factory, Builder, Prototype, Singleton. Những Design pattern loại này cung cấp một giải pháp để tạo ra các object và che giấu được logic của việc tạo ra nó, thay vì tạo ra object một cách trực tiếp bằng cách sử dụng methodnew. Điều này giúp cho chương trình trở nên mềm dẻo hơn trong việc quyết định object nào cần được tạo ra trong những tình huống được đưa ra.Structural Pattern(nhóm cấu trúc – 7 mẫu) gồm:Adapter, Bridge, Composite, Decorator, Facade, Flyweight vàProxy. Những Design pattern loại này liên quan tớiclassvà các thành phần củaobject.Nó dùng để thiết lập, định nghĩa quan hệ giữa các đối tượng.Behavioral Pattern(nhóm tương tác/ hành vi – 11 mẫu) gồm:Interpreter, Template Method, Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy và Visitor. Nhóm này dùng trong thực hiện các hành vi của đối tượng, sự giao tiếp giữa cácobjectvới nhau.( nhóm khởi tạo – 5 mẫu ) gồm : Factory Method, Abstract Factory, Builder, Prototype, Singleton. Những Design pattern loại này phân phối một giải pháp để tạo ra những object và che giấu được logic của việc tạo ra nó, thay vì tạo ra object một cách trực tiếp bằng cách sử dụng method. Điều này giúp cho chương trình trở nên mềm dẻo hơn trong việc quyết định hành động object nào cần được tạo ra trong những trường hợp được đưa ra. ( nhóm cấu trúc – 7 mẫu ) gồm : Adapter, Bridge, Composite, Decorator, Facade, Flyweight vàProxy. Những Design pattern loại này tương quan tớivà những thành phần của. Nó dùng để thiết lập, định nghĩa quan hệ giữa những đối tượng người tiêu dùng. ( nhóm tương tác / hành vi – 11 mẫu ) gồm : Interpreter, Template Method, Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy và Visitor. Nhóm này dùng trong thực thi những hành vi của đối tượng người dùng, sự tiếp xúc giữa cácvới nhau .Hình dưới là mối quan hệ giữa 23 Design Pattern cơ bản ( GoF ) :
Nhóm Creational (nhóm khởi tạo)
Singleton:Đảm bảo 1 class chỉ có 1 instance và cung cấp 1 điểm truy xuất toàn cục đến nó.Tần suất sử dụng:cao trung bình.Abstract Factory:Cung cấp một interface cho việc tạo lập các đối tượng (có liên hệ với nhau) mà không cần qui định lớp khi hay xác định lớp cụ thể (concrete) tạo mỗi đối tượng.Tần suất sử dụng:cao.Factory Method:Định nghĩa Interface để sinh ra đối tượng nhưng để cho lớp con quyết định lớp nào được dùng để sinh ra đối tượng Factory method cho phép một lớp chuyển quá trình khởi tạo đối tượng cho lớp con.Tần suất sử dụng:cao.Builder:Tách rời việc xây dựng (construction) một đối tượng phức tạp khỏi biểu diễn của nó sao cho cùng một tiến trình xây dựng có thể tạo được các biểu diễn khác nhau.Tần suất sử dụng:trung bình thấp.Prototype:Qui định loại của các đối tượng cần tạo bằng cách dùng một đối tượng mẫu, tạo mới nhờ vào sao chép đối tượng mẫu này.Tần suất sử dụng:trung bình.
Nhóm Structural (nhóm cấu trúc)
: Đảm bảo 1 class chỉ có 1 instance và phân phối 1 điểm truy xuất toàn cục đến nó. Tần suất sử dụng : cao trung bình. : Cung cấp một interface cho việc tạo lập những đối tượng người tiêu dùng ( có liên hệ với nhau ) mà không cần qui định lớp khi hay xác lập lớp đơn cử ( concrete ) tạo mỗi đối tượng người tiêu dùng. Tần suất sử dụng : cao. : Định nghĩa Interface để sinh ra đối tượng người tiêu dùng nhưng để cho lớp con quyết định hành động lớp nào được dùng để sinh ra đối tượng người tiêu dùng Factory method được cho phép một lớp chuyển quy trình khởi tạo đối tượng người tiêu dùng cho lớp con. Tần suất sử dụng : cao. : Tách rời việc kiến thiết xây dựng ( construction ) một đối tượng người tiêu dùng phức tạp khỏi màn biểu diễn của nó sao cho cùng một tiến trình kiến thiết xây dựng hoàn toàn có thể tạo được những trình diễn khác nhau. Tần suất sử dụng : trung bình thấp. : Qui định loại của những đối tượng người tiêu dùng cần tạo bằng cách dùng một đối tượng người tiêu dùng mẫu, tạo mới nhờ vào sao chép đối tượng người dùng mẫu này. Tần suất sử dụng : trung bình .
Adapter:Do vấn đề tương thích, thay đổi interface của một lớp thành một interface khác phù hợp với yêu cầu người sử dụng lớp.Tần suất sử dụng:cao trung bình.Bridge:Tách rời ngữ nghĩa của một vấn đề khỏi việc cài đặt, mục đích để cả hai bộ phận (ngữ nghĩa và cài đặt) có thể thay đổi độc lập nhau.Tần suất sử dụng:trung bình.Composite:Tổ chức các đối tượng theo cấu trúc phân cấp dạng cây. Tất cả các đối tượng trong cấu trúc được thao tác theo một cách thuần nhất như nhau.Tạo quan hệ thứ bậc bao gộp giữa các đối tượng. Client có thể xem đối tượng bao gộp và bị bao gộp như nhau -> khả năngtổng quát hoá trong code của client -> dễ phát triển, nâng cấp, bảo trì.Tần suất sử dụng:cao trung bình.Decorator:Gán thêm trách nhiệm cho đối tượng (mở rộng chức năng) vào lúc chạy (dynamically).Tần suất sử dụng:trung bình.Facade:Cung cấp một interface thuần nhất cho một tập hợp các interface trong một “hệ thống con” (subsystem). Nó định nghĩa 1 interface cao hơn các interface có sẵn để làm cho hệ thống con dễ sử dụng hơn.Tần suất sử dụng:cao.: Do yếu tố thích hợp, biến hóa interface của một lớp thành một interface khác tương thích với nhu yếu người sử dụng lớp. Tần suất sử dụng : cao trung bình. : Tách rời ngữ nghĩa của một yếu tố khỏi việc thiết lập, mục tiêu để cả hai bộ phận ( ngữ nghĩa và thiết lập ) hoàn toàn có thể biến hóa độc lập nhau. Tần suất sử dụng : trung bình. : Tổ chức những đối tượng người dùng theo cấu trúc phân cấp dạng cây. Tất cả những đối tượng người tiêu dùng trong cấu trúc được thao tác theo một cách thuần nhất như nhau. Tạo quan hệ thứ bậc bao gộp giữa những đối tượng người dùng. Client hoàn toàn có thể xem đối tượng người tiêu dùng bao gộp và bị bao gộp như nhau -> khả năngtổng quát hoá trong code của client -> dễ tăng trưởng, tăng cấp, bảo dưỡng. Tần suất sử dụng : cao trung bình. : Gán thêm nghĩa vụ và trách nhiệm cho đối tượng người dùng ( lan rộng ra tính năng ) vào lúc chạy ( dynamically ). Tần suất sử dụng : trung bình. : Cung cấp một interface thuần nhất cho một tập hợp những interface trong một “ mạng lưới hệ thống con ” ( subsystem ). Nó định nghĩa 1 interface cao hơn những interface có sẵn để làm cho mạng lưới hệ thống con dễ sử dụng hơn. Tần suất sử dụng : cao .Xem thêm : Cấu Tạo Và Nguyên Lý Hoạt Động Của Hộp Số Lùi Xe 3 Bánh Trục 20M mFlyweight:Sử dụng việc chia sẻ để thao tác hiệu quả trên một số lượng lớn đối tượng “cở nhỏ” (chẳng hạn paragraph, dòng, cột, ký tự…).Tần suất sử dụng:thấp.Proxy:Cung cấp đối tượng đại diện cho một đối tượng khác để hỗ trợ hoặc kiểm soát quá trình truy xuất đối tượng đó. Đối tượng thay thế gọi là proxy.Tần suất sử dụng:cao trung bình.
Nhóm Behavioral (nhóm hành vi/ tương tác)
: Sử dụng việc san sẻ để thao tác hiệu suất cao trên một số lượng lớn đối tượng người dùng “ cở nhỏ ” ( ví dụ điển hình paragraph, dòng, cột, ký tự … ). Tần suất sử dụng : thấp. : Cung cấp đối tượng người dùng đại diện thay mặt cho một đối tượng người dùng khác để tương hỗ hoặc trấn áp quy trình truy xuất đối tượng người tiêu dùng đó. Đối tượng thay thế sửa chữa gọi là proxy. Tần suất sử dụng : cao trung bình .Chain of Responsibility:Khắc phục việc ghép cặp giữa bộ gởi và bộ nhận thông điệp. Các đối tượng nhận thông điệp được kết nối thành một chuỗi và thông điệp được chuyển dọc theo chuỗi nầy đến khi gặp được đối tượng xử lý nó. Tránh việc gắn kết cứng giữa phần tử gởi request với phần tử nhận và xử lý request bằng cách cho phép hơn 1 đối tượng có có cơ hội xử lý request. Liên kết các đốitượng nhận request thành 1 dây chuyền rồi gửi request xuyên qua từng đối tượng xử lý đến khi gặp đối tượng xử lý cụ thể.Tần suất sử dụng:trung bình thấp.Command:Mỗi yêu cầu (thực hiện một thao tác nào đó) được bao bọc thành một đối tượng. Các yêu cầu sẽ được lưu trữ và gởi đi như các đối tượng.Đóng gói request vào trong một Object, nhờ đó có thể nthông số hoá chương trình nhận request và thực hiện các thao tác trên request: sắp xếp, log, undo…Tần suất sử dụng:cao trung bình.Interpreter:Hỗ trợ việc định nghĩa biểu diễn văn phạm và bộ thông dịch cho một ngôn ngữ.Tần suất sử dụng:thấp.Iterator:Truy xuất các phần tử của đối tượng dạng tập hợp tuần tự (list, array, …) mà không phụ thuộc vào biểu diễn bên trong của các phần tử.Tần suất sử dụng:cao.Mediator:Định nghĩa một đối tượng để bao bọc việc giao tiếp giữa một số đối tượng với nhau.Tần suất sử dụng:trung bình thấp.Memento:Hiệu chỉnh và trả lại như cũ trạng thái bên trong của đối tượng mà vẫn không vi phạm việc bao bọc dữ liệu.Tần suất sử dụng:thấp.Observer:Định nghĩa sự phụ thuộc một-nhiều giữa các đối tượng sao cho khi một đối tượng thay đổi trạng thái thì tất cả các đối tượng phụ thuộc nó cũng thay đổi theo.Tần suất sử dụng:cao.State:Cho phép một đối tượng thay đổi hành vi khi trạng thái bên trong của nó thay đổi, ta có cảm giác như class của đối tượng bị thay đổi.Tần suất sử dụng:trung bình.Strategy:Bao bọc một họ các thuật toán bằng các lớp đối tượng để thuật toán có thể thay đổi độc lập đối với chương trình sử dụng thuật toán.Cung cấp một họ giải thuật cho phép client chọn lựa linh động một giải thuật cụ thể khi sử dụng.Tần suất sử dụng:cao trung bình.Template method:Định nghĩa phần khung của một thuật toán, tức là một thuật toán tổng quát gọi đến một số phương thức chưa được cài đặt trong lớp cơ sở; việc cài đặt các phương thức được ủy nhiệm cho các lớp kế thừa.Tần suất sử dụng:trung bình.Visitor:Cho phép định nghĩa thêm phép toán mới tác động lên các phần tử của một cấu trúc đối tượng mà không cần thay đổi các lớp định nghĩa cấu trúc đó.Tần suất sử dụng:thấp.
Để học Design Patterns cần có gì?
Khắc phục việc ghép cặp giữa bộ gởi và bộ nhận thông điệp. Các đối tượng người dùng nhận thông điệp được liên kết thành một chuỗi và thông điệp được chuyển dọc theo chuỗi nầy đến khi gặp được đối tượng người dùng giải quyết và xử lý nó. Tránh việc kết nối cứng giữa thành phần gởi request với thành phần nhận và giải quyết và xử lý request bằng cách được cho phép hơn 1 đối tượng người tiêu dùng có có thời cơ giải quyết và xử lý request. Liên kết những đốitượng nhận request thành 1 dây chuyền sản xuất rồi gửi request xuyên qua từng đối tượng người dùng giải quyết và xử lý đến khi gặp đối tượng người dùng giải quyết và xử lý đơn cử. Tần suất sử dụng : trung bình thấp. Mỗi nhu yếu ( thực thi một thao tác nào đó ) được bảo phủ thành một đối tượng người tiêu dùng. Các nhu yếu sẽ được tàng trữ và gởi đi như những đối tượng người tiêu dùng. Đóng gói request vào trong một Object, nhờ đó hoàn toàn có thể nthông số hoá chương trình nhận request và triển khai những thao tác trên request : sắp xếp, log, undo … Tần suất sử dụng : cao trung bình. Hỗ trợ việc định nghĩa màn biểu diễn văn phạm và bộ thông dịch cho một ngôn từ. Tần suất sử dụng : thấp. Truy xuất những thành phần của đối tượng người dùng dạng tập hợp tuần tự ( list, array, … ) mà không phụ thuộc vào vào màn biểu diễn bên trong của những thành phần. Tần suất sử dụng : cao. Định nghĩa một đối tượng người tiêu dùng để bảo phủ việc tiếp xúc giữa một số ít đối tượng người dùng với nhau. Tần suất sử dụng : trung bình thấp. Hiệu chỉnh và trả lại như cũ trạng thái bên trong của đối tượng người tiêu dùng mà vẫn không vi phạm việc bảo phủ tài liệu. Tần suất sử dụng : thấp. Định nghĩa sự phụ thuộc vào một-nhiều giữa những đối tượng người tiêu dùng sao cho khi một đối tượng người dùng biến hóa trạng thái thì toàn bộ những đối tượng người dùng nhờ vào nó cũng đổi khác theo. Tần suất sử dụng : cao. Cho phép một đối tượng người tiêu dùng biến hóa hành vi khi trạng thái bên trong của nó đổi khác, ta có cảm xúc như class của đối tượng người tiêu dùng bị biến hóa. Tần suất sử dụng : trung bình. Bao bọc một họ những thuật toán bằng những lớp đối tượng người tiêu dùng để thuật toán hoàn toàn có thể đổi khác độc lập so với chương trình sử dụng thuật toán. Cung cấp một họ giải thuật được cho phép client lựa chọn linh động một giải thuật đơn cử khi sử dụng. Tần suất sử dụng : cao trung bình. Định nghĩa phần khung của một thuật toán, tức là một thuật toán tổng quát gọi đến một số ít phương pháp chưa được setup trong lớp cơ sở ; việc setup những phương pháp được ủy nhiệm cho những lớp thừa kế. Tần suất sử dụng : trung bình. Cho phép định nghĩa thêm phép toán mới ảnh hưởng tác động lên những thành phần của một cấu trúc đối tượng người tiêu dùng mà không cần đổi khác những lớp định nghĩa cấu trúc đó. Tần suất sử dụng : thấp .Để học tốt Design Pattern bạn nắm vững đượcBốn đặc tính của OOP : Kế thừa, Đa hình, Trừu tượng, Bao đóng .Tiếp theo là hai khái niệminterface và abstract : cái này cực kỳ quan trọng, để hiểu và vận dụng 2 khái niệm này hoàn toàn có thể sẽ mất một thời hạn, nhưng khi bạn nắm chắc nó bạn sẽ thấy nó thực sự thiết yếu .Bỏ tư duy theo lối cấu trúc, nâng tư duy hoàn toànOOP .Sau khi bạn đã nắm chắc những thứ kể trên, bạn nên bắt tay vào học Design Pattern càng sớm càng tốt. Design Pattern giúp bạn đặt trình cao mới 🙂 .
Xem thêm: First Drive: Lamborghini Centenario Specs, Photos, Price & Review
Kết luận
Design patternthể hiện tính kinh nghiệm của công việc lập trình, xây dựng và thiết kế phần mềm. Người hiểu và vận dụng được Design Pattern thích hợp trong hệ thống sẽ tiết kiệm được rất nhiều thời gian, công sức, dễ phát triển, mở rộng, bảo trì. Tuy nhiên không nên quá lạm dụng nó.
Chúng ta nên nhớ rằng :Design patterns là 1 đoạn mô tả, hoặc 1 khuôn mẫu để giải quyết 1 vấn đề nào đó. Nó không phải là thiết kế cuối cùng.Design Pattern được tạo ra để giải quyết vấn đề, chứ không phải để phức tạp hóa nó.Design Pattern giúp code được tối ưu hóa, dễ tái sử dụng, dễ hiểu, dễ nâng cấp sửa chữa.
Design patterns là 1 đoạn diễn đạt, hoặc 1 khuôn mẫu để xử lý 1 yếu tố nào đó. Nó không phải là phong cách thiết kế ở đầu cuối. Design Pattern được tạo ra để xử lý yếu tố, chứ không phải để phức tạp hóa nó. Design Pattern giúp code được tối ưu hóa, dễ tái sử dụng, dễ hiểu, dễ tăng cấp sửa chữa thay thế .
Source: https://final-blade.com
Category: Kiến thức Internet