Trong công nghệ phần mềm, một mẫu thiết kế (tiếng Anh: design pattern) là một giải pháp tổng thể cho các vấn đề chung trong thiết kế phần mềm. Một mẫu thiết kế không phải là một thiết kế hoàn thiện để mà có thể được chuyển đổi trực tiếp thành mã; nó chỉ là một mô tả hay là sườn (template) mô tả cách giải quyết một vấn đề mà có thể được dùng trong nhiều tình huống khác nhau. Các mẫu thiết kế hướng đối tượng thường cho thấy mối quan hệ và sự tương tác giữa các lớp hay các đối tượng, mà không cần chỉ rõ các lớp hay đối tượng của từng ứng dụng cụ thể. Các giải thuật không được xem là các mẫu thiết kế, vì chúng giải quyết các vấn đề về tính toán hơn là các vấn đề về thiết kế.
Lịch sử
Các mẫu xuất phát từ một ý niệm kiến trúc đưa ra bởi Christopher Alexander. Vào năm 1987, Kent Beck và Ward Cunningham bắt đầu thử nghiệm ý tưởng áp dụng các mẫu vào lập trình và đưa ra các kết quả của chúng tại hội thảo OOPSLA vào năm đó. Vào các năm tiếp theo, Beck, Cunningham và những người khác vẫn tiếp tục với công việc này.
Các mẫu thiết kế đã trở nên phổ biến trong khoa học máy tính sau khi cuốn sách Design Patterns: Elements of Reusable Object-Oriented Software được ấn hành vào năm 1994 bởi các tác giả được biết đến với tên "Gang of Four"(Gamma et al) gọi tắt là "GoF". Vào cùng năm đó, cuộc hội thảo đầu tiên về Các ngôn ngữ mẫu cho các chương trình đã được tổ chức và vào năm sau, Kho dự trữ các mẫu Portland (''Portland Pattern Repository) đã được thiết lập để lưu trữ văn bản về các mẫu thiết kế.
Cách sử dụng
Các mẫu thiết kế có thể giúp tăng tốc quá trình phát triển phần mềm bằng cách cung cấp các mẫu hình (paradigms) phát triển đã được chứng thực và kiểm chứng. Để thiết kế phần mềm hiệu quả đòi hỏi phải xem xét các yếu tố mà chỉ trở nên rõ ràng sau khi hiện thực. Xác định được chúng, thông qua các mẫu thiết kế, chúng ta sẽ thoát khỏi chúng vì chúng có thể dẫn đến những rắc rối lớn và cải tiến khả năng dễ đọc của mã cho người viết mã và các nhà kiến trúc sẽ cảm thấy quen thuộc với các mẫu.
Thông thường, mọi người chỉ biết cách áp dụng một số kĩ thuật thiết kế phần mềm nào đó vào một vài vấn đề cụ thể nào đó. Những kĩ thuật này khó áp dụng mở rộng cho các vấn đề khác. Các mẫu thiết kế cung cấp các giải pháp chung, được viết tài liệu dưới một định dạng mà không gắn liền với một vấn đề cụ thể nào cả.
Các mẫu cho phép các nhà phát triển giao tiếp với nhau dùng các tên dễ hiểu, được dùng rộng rãi để đặt cho các tương tác của phần mềm. Các mẫu thiết kế chung có thể được cải tiến qua thời gian, để trở nên ổn định hơn là thiết kế tùy biến (ad-hoc designs).
Phân loại
Các mẫu thiết kế có thể được phân loại dựa vào nhiều tiêu chí, chung nhất là dựa vào vấn đề cơ bản mà chúng giải quyết. Theo tiêu chuẩn này, các mẫu thiết kế có thể được phân loại thành nhiều lớp, một số trong chúng là:
- Mẫu cơ sở (Fundamental pattern)
- Các mẫu tạo lập (Creational pattern)
- Các mẫu cấu trúc (Structural pattern)
- Các mẫu hành vi (Behavioral pattern)
- Các mẫu đồng thời (Concurrency pattern)
- Các mẫu xử lý sự kiện (Event handling pattern)
- Các mẫu kiến trúc (Architectural pattern)
Viết tài liệu
Việc viết tài liệu cho một mẫu thiết kế nên chứa đựng đủ thông tin về vấn đề mà mẫu đề cập, ngữ cảnh trong đó nó được sử dụng và giải pháp được đề nghị. Tuy vậy, các tác giả mẫu thường sử dụng các dạng trình bày mẫu riêng của mình để trình bày các mẫu thiết kế, và các dạng trình bày mẫu thường tương tự với các phần cần thiết đã nêu. Các tác giả thường bao gồm thêm một số đoạn để cung cấp nhiều thông tin hơn và tổ chức các phần cần thiết trong những đoạn khác nhau có thể có với những tên khác nhau.
Một dạng chung thường được sử dụng là dạng được sử dụng bởi "Bộ tứ" (Các tác giả của Mẫu Thiết Kế). Nó bao gồm các đoạn:
- Tên mẫu và sự phân loại: Mỗi mẫu nên có một tên mô tả và là duy nhất để danh định và tham khảo đến. Thêm vào đó, một mẫu nên được phân loại theo một cách đã được mô tả trước đó. Việc phân loại giúp việc định ra việc sử dụng mẫu.
- Dự định: Đoạn này nên mô tả mục tiêu của mẫu và các lập luận cho việc sử dụng mẫu. Nó như phần vấn đề của mẫu.
- Tên gọi khác: Một mẫu có thể có nhiều hơn một tên. Những tên này nên được viết trong đọan này.
- Động cơ: Đoạn này cung cấp một kịch bản bao gồm một vấn đề và một ngữ cảnh trong đó mẫu có thể được sử dụng. Với mối quan hệ vấn đề và ngữ cảnh, đoạn này chỉ ra khi nào mẫu được sử dụng.
- Có thể áp dụng: Đoạn này mô tả các tình huống trong đó mẫu có thể áp dụng. Nó biểu diễn phần ngữ cảnh của mẫu.
- Cấu trúc: Một biểu diễn đồ thị của mẫu.Sơ đồ lớp và Sơ đồ tương tác có thể được sử dụng cho cho mục đích này.
- Thành phần tham gia: Danh sách các lớp và đối tượng được sử dụng trong mẫu này và vai trò của chúng trong thiết kế.
- Sự cộng tác: Mô tả cách các lớp và các đối tượng được sử dụng trong mẫu tương tác với các đối tượng khác.
- Các kết quả: Đoạn này mô tả các kết quả, ảnh hưởng và các thỏa hiệp gây ra khi sử dụng mẫu.
- Sự hiện thực: Đoạn này mô tả sự hiện thực mẫu và biểu diễn phần giải pháp của mẫu. Nó cung cấp các kỹ thuật được sử dụng trong việc hiện thực mẫu, và đề nghị các cách cho sự hiện thực này.
- Mã mẫu: Một minh họa cách mẫu này được sử dụng trong một ngôn ngữ lập trình.
- Các sử dụng được biết: Đoạn này bao gồm các ví dụ sử dụng thực sự của mẫu.
- Các mẫu liên quan: Đoạn này bao gồm các mẫu khác có một số quan hệ với mẫu ví thế chúng có thể được sử dụng cùng với mẫu hoặc thay thế cho mẫu. Nó cũng bao gồm các sự khác nhau của mẫu với các mẫu tương tự khác.
👁️
3 | 🔗 | 💖 | ✨ | 🌍 | ⌚
Trong công nghệ phần mềm, một **mẫu thiết kế** (tiếng Anh: design pattern) là một giải pháp tổng thể cho các vấn đề chung trong thiết kế phần mềm. Một mẫu thiết kế không phải
**Mẫu thiết kế** (tiếng Anh là _design pattern_) có nhiều nghĩa tùy vào ngữ cảnh khác nhau: * Mẫu thiết kế (kiến trúc), một cách nắm bắt và truyền đạt các ý tưởng thiết kế
Trong công nghệ phần mềm, **mẫu hợp tử** (Tiếng Anh: **Composite pattern**) là một mẫu thiết kế phân vùng. Mẫu hợp tử mô tả một nhóm các đối tượng được đối xử giống như với
**Kiểm thử phần mềm** (tiếng Anh: **Software testing**) là một cuộc kiểm tra được tiến hành để cung cấp cho các bên liên quan thông tin về chất lượng của sản phẩm hoặc dịch vụ
liên_kết=https://en.wikipedia.org/wiki/File:ClamTk_5.27.png|nhỏ|300x300px|[[ClamTk, một phần mềm diệt vi-rút mã nguồn mở dựa trên công cụ diệt virus ClamAV, ban đầu được Tomasz Kojm phát triển vào năm 2001.]] nhỏ|255x255px|Ảnh chụp giao diện phần mềm diệt virus có
**Kiến trúc phần mềm** của một chương trình máy tính hay một hệ thống tính toán là cấu trúc của các thành phần trong hệ thống đó. _Kiến trúc phần mềm_ bao gồm các phần
**Quy trình phát triển phần mềm** _(software development methodology)_ là một cấu trúc bao gồm tập hợp các thao tác và các kết quả tương quan sử dụng trong việc phát triển để sản xuất
Trong kỹ nghệ phần mềm, một **dạng thức thiết kế** là một giải trình lập lại được cho một dạng vấn đề thường xảy ra trong ngành thiết kế phần mềm. Một dạng thức thiết
**Thiết kế lặp** (tiếng Anh: _iterative design_) là một phương pháp thiết kế dựa trên một quá trình tuần hoàn của tạo mẫu,thử nghiệm, phân tích, và tinh chỉnh một sản phẩm hoặc quy trình.
Trong công nghiệp phần mềm, mô hình Singleton là một mẫu thiết kế phần mềm để hạn chế sự khởi tạo của lớp đối tượng. Điều này rất hữu ích khi cần một đối tượng
**Portland Pattern Repository** (**PPR**) là một kho lưu trữ các mẫu thiết kế phần mềm lập trình máy tính. Nó đi kèm với một trang web đồng hành, WikiWikiWeb, là wiki đầu tiên trên thế
**Flyweight** là một mẫu thiết kế phần mềm. Khi nhiều đối tượng (objects) phải được xử lý mà chương trình không thể chịu nổi một lượng dữ liệu khổng lồ, thì cần dùng flyweight. Trong
Trong lập trình hướng đối tượng, **facade pattern** là một mẫu thiết kế phần mềm nhằm cung cấp một giao diện (_interface_) đơn giản giúp che giấu phần mã cấu trúc phức tạp phía sau,
**Phần mềm dạng dịch vụ** (**SaaS** ) là mô hình cấp phép và phân phối phần mềm trong đó phần mềm được cấp phép trên cơ sở đăng ký và được lưu trữ tập trung.
**_Design Patterns_** (ISBN 0201633612) là cuốn sách khoa học máy tính đưa ra các giải pháp chuẩn và các quy ước đặt tên cho các vấn đề chung trong thiết kế phần mềm. Các tác
Mô tả Factory method bằng [[Unified Modeling Language|UML]] **Factory method**, đầy đủ là **Factory method pattern**, là thiết kế mẫu hướng đối tượng trong việc thiết kế phần mềm cho máy tính, nhằm giải quyết
**Blender** là một phần mềm đồ họa 3D miễn phí và nguồn mở, được sử dụng để làm phim hoạt hình, kỹ xảo, ảnh nghệ thuật, mẫu in 3D, phần mềm tương tác 3D và
Thời gian giao hàng dự kiến cho sản phẩm này là từ 7-9 ngày Một bộ trang điểm tinh tế, giới thiệu cho người mới bắt đầu trang điểm. Sản phẩm chính: 1. Bảng phấn
Trí tuệ nhân tạo tạo sinh (Generative AI) đang định hình lại cách các doanh nghiệp hoạt động, mang đến khả năng tạo ra nội dung, ý tưởng và thậm chí là mẫu thiết kế
**Robert Cecil Martin**, thường được gọi là "Uncle Bob", người Mỹ. Ông là một kỹ sư phần mềm, người tư vấn, và là tác giả của nhiều cuốn best-seller. Ông được công nhận nhiều nhất
nhỏ| Một sơ đồ cho thấy cách người dùng tương tác với [[phần mềm ứng dụng trên một máy tính để bàn thông thường. Lớp phần mềm ứng dụng giao tiếp với hệ điều hành,
**Phần mềm xử lý bảng tính** hay **Bảng tính** (tiếng Anh**: Spreadsheet**) là một phần mềm ứng dụng dùng để tổ chức, phân tích và lưu trữ dữ liệu thông qua các bảng tính (gọi
**Wine** là một lớp tương thích tự do nguồn mở dùng để chạy các phần mềm viết cho Windows trên các hệ điều hành tương tự Unix (Linux, FreeBSD,...). Wine cũng cung cấp một thư
**Phần mềm ác ý**, còn gọi là **phần mềm ác tính**, **phần mềm độc hại**, **phần mềm gây hại** hay **mã độc** (tiếng Anh: **malware** là sự ghép của hai chữ _malicious_ và _software_) là
**Quản lý dự án phần mềm** việc lên kế hoạch có tính khoa học và nghệ thuật trong quá trình quản lý các dự án phần mềm. Nó chính là quy trình quản lý dự
nhỏ|Ảnh chụp màn hình trò chơi giáo dục Chinese Tap trên Android để dạy học tiếng Trung. **Phần mềm giáo dục** là phần mềm máy tính có nhiệm vụ chính là hỗ trợ dạy học
nhỏ|400x400px|Giấy phép phần mềm trong bối cảnh bản quyền theo Mark Webbink. Từ trái sang phải ít quyền cho người được cấp phép/user của một phần mềm và nhiều hơn nữa quyền giữ lại bởi
nhỏ|217x217px|Một bản vẽ thiết kế thời trang **Thiết kế** là việc tạo ra một bản vẽ hoặc quy ước nhằm tạo dựng một đối tượng, một hệ thống hoặc một tương tác giữa người với
**Công ty phần mềm** là một công ty có các sản phẩm chính là các phần mềm, công nghệ phần mềm, phân phối và phát triển sản phẩm phần mềm. Công ty phần mềm là
Trong thiết kế, tương tác giữa con người- máy tính và sự phát triển phần mềm. **Thiết kế tương tác** thường được viết tắt là **IxD**, được định nghĩa là sự ứng dụng của thiết
**Zoom** là phần mềm gọi video phát triển bởi Zoom Video Communications. Phiên bản miễn phí cung cấp gọi video với tối đa 100 thiết bị cùng lúc, và giới hạn thời gian là 40
Trong đồ họa máy tính, [https://toplistvietnam.net/toplist-phan-mem-thiet-ke-do-hoa-pho-bien-2023/ phần mềm đồ họa] đề cập đến một chương trình hoặc bộ sưu tập các chương trình cho phép một người thao tác hình ảnh hoặc mô hình trực
**Nhà phát triển phần mềm** là một cá nhân hay một tổ chức có liên quan đến các vấn đề trong quá trình phát triển phần mềm ở mức cao hơn việc chỉ thiết kế
**Tư duy thiết kế** (Design thinking) là một thuật ngữ được sử dụng để chỉ một tập hợp các quá trình nhận thức, chiến lược và thực tiễn mà qua đó - các khái niệm
Trong công nghệ phần mềm, **Adapter pattern**(mẫu thiết kế tiếp hợp) là **một mẫu thiết kế tiếp hợp** cho phép chuyển đổi một interface có sẵn thành một interface khác thích hợp cho lớp đang
**Mục đích** Định nghĩa và bao bọc các thuật toán có cùng mục đích trong những lớp có giao diện chung. Làm cho sự thay đổi thuật toán trở nên linh động và độc lập
Bản thiết kế cảnh người phụ nữ sau song sắt của Robert Edmond Jones trong vở _Machinal_ (1928) nhỏ|Mô hình thiết kế sân khấu của Marcel Jambon cho vở _[[Otello_ của Giuseppe Verdi (1895) tại
**Nhà thiết kế thời trang** () hay **nhà tạo mốt** () là người làm nghề tạo mẫu, chịu trách nhiệm thiết kế mẫu trang phục (tức các dạng mẫu vải khác nhau) để hiện thực
**Phần mềm ứng dụng** (tiếng Anh: _Application software_, hay còn được viết tắt là _app_) là một loại chương trình có khả năng làm cho thiết bị điện tử thực hiện trực tiếp một công
**Delphi** là sản phẩm phần mềm sử dụng phương ngữ Delphi của ngôn ngữ lập trình Object Pascal và cung cấp môi trường phát triển tích hợp (IDE) để phát triển ứng dụng nhanh chóng
**Thiết kế truyền thông** là một ngành học kết hợp giữa thiết kế và phát triển thông tin mà nó quan tâm đến việc các phương tiện truyền thông liên quan như in ấn, sáng
**Howard G. "Ward" Cunningham** (sinh ngày 26 tháng 5 năm 1949) là một lập trình viên người Mỹ, có công phát triển wiki đầu tiên và là đồng tác giả của _Tuyên ngôn về phát
Trong thiết kế hướng đối tượng, **Visitor** là mẫu thiết kế (Design Patterns) cho phép định nghĩa các thao tác (operations) trên một tập hợp các đối tượng (objects) không đồng nhất (về kiểu) mà
Trong lập trình hướng đối tượng, **decorator pattern** (mẫu trang trí) là một mẫu thiết kế cho phép thêm các thao tác mới vào một thao tác có sẵn một cách linh động. ## Giới
CHI TIẾT SẢN PHẨM :✔ Chất liệu áo: Vải Tơ , chất vải mềm mịn, không lộ da, bề mặt tiếp xúc với da êm, rất thoải mái khi mặc, giữ form dáng bền đẹp
CHI TIẾT SẢN PHẨM :✔ Chất liệu áo: Vải Tơ , chất vải mềm mịn, không lộ da, bề mặt tiếp xúc với da êm, rất thoải mái khi mặc, giữ form dáng bền đẹp
CHI TIẾT SẢN PHẨM :✔ Chất liệu áo: Vải Tơ Ý, chất vải mềm mịn, không lộ da, bề mặt tiếp xúc với da êm, rất thoải mái khi mặc, giữ form dáng bền đẹp
CHI TIẾT SẢN PHẨM :✔ Chất liệu áo: Vải Tơ Ý, chất vải mềm mịn, không lộ da, bề mặt tiếp xúc với da êm, rất thoải mái khi mặc, giữ form dáng bền đẹp
CHI TIẾT SẢN PHẨM :✔ Chất liệu áo: Vải Tơ Ý, chất vải mềm mịn, không lộ da, bề mặt tiếp xúc với da êm, rất thoải mái khi mặc, giữ form dáng bền đẹp
**MVC** (_viết tắt của_ **M**odel-**V**iew-**C**ontroller) là một mẫu kiến trúc phần mềm để tạo lập giao diện người dùng trên máy tính. MVC chia một ứng dụng thành ba phần tương tác được với nhau