Nhập đề
Kinh thư ghi lại rằng, con đường tu chân có 3 cảnh giới: Luyện khí, Trúc cơ và Kết đan. Luyện khí là quá trình rèn thân luyện thể, cho phàm thân kiên cường dẻo dai. Trúc cơ là quá trình du nhập thiên địa linh khí vào thể nội, giúp khai thông kinh mạch. Khi thiên địa linh khí trong đan điền đạt tới một nồng độ nhất định, sẽ kết thành Kim Đan, đặt bước chân đầu tiên con đường tu chân đại đạo.
Con đường khởi đầu của code học cũng có 3 cảnh giới: Học đồ (Junior Developer), Học sĩ (Developer), Đại sư (Senior Developer). Để đạt đến cảnh giới Đại sư (senior), bất kì Học Sĩ (dev) nào cũng cần phải tường tận vài Design Pattern cơ bản để phòng thân. Bài viết này do tại hạ viết ra trong một phút cao hứng nhất thời, nhằm chia sẻ với các nhân sĩ võ lâm trên con đường truy cầu đại đạo.
Nhiều kẻ khi đạt đến cảnh giới Đại sư (Senior) cứ ngỡ rằng mình đã đạt đến cảnh giới tối cao của võ học mà không biết rằng “Thiên ngoại hữu thiên, nhân ngoại hữu nhân”. Phía trên cảnh giới Đại sư còn có vô số cao thủ đạt tới những cảnh giới khác như Chưởng Môn (Project Manager) hoặc Tông sư (Software Architect). Những kẻ này hiếm thấy như phượng mao lân giác (lông phượng sừng lân), mang một thân võ công cao ngất ngưởng và lương cao ngất ngưỡng, lướt gió mà đi, đạp mây mà về. Do cảnh giới bản thân còn thấp, bần đạo tạm thời không bàn tới. Bằng hữu nào hứng thú có thể tìm hiểu thêm tại đây.
Hỏi thế gian DS là chi, mà bọn Dev thề nguyền sống chết
Nói một cách đơn giản, design pattern là các mẫu thiết kế có sẵn, dung để giải quyết một vấn đề. Áp dụng mẫu thiết kế này sẽ làm code dễ bảo trì, mở rộng hơn (Có thể sẽ khó hiểu hơn 1 chút). Nói văn hoa, design pattern là tinh hoa trong võ học, đã được các bậc tông sư đúc kết, truyền lưu từ đời này qua đời khác. Design pattern là thiết kế dựa trên code, nó nằm ở một cảnh giới cao hơn CODE, do đó đệ tử của bất kì môn phái nào (C#, Java, Python) cũng có thể áp dụng vào được. Ảnh lấy từ bí kíp Head First Design Pattern (xem phía dưới).
Trước khi dạy võ, các bậc đạo sư luôn dặn học trò rằng học võ là để tu thân hành hiệp giúp đời, không phải để ý vào một thân võ học mà đi bắt nạt kẻ yếu. Nay ta cũng có một lời khuyên tương tự: Học design pattern là để nâng cao trình độ, để giải quyết vấn đề, không phải đế lấy ra lòe thiên hạ. Nhiều kẻ học nghệ chưa tinh, ngựa non háu đá, nhét design pattern vào dự án một cách vô tội vạ, nhẹ thì tẩu hỏa nhập ma, võ công sụt giảm, nặng thì hồn phi phách tán, vĩnh kiếp không được siêu sinh. Các đạo hữu hãy nhìn kẻ than tàn ma dại phía dưới mà làm gương.
Design Pattern Kiếm Phổ
Bí kíp võ công đầu tiên nhắc đến design pattern là Design Patterns: Elements of Reusable Object-Oriented Software. Tuy nhiên, khẩu quyết trong quyển này khá khô cứng, khó truyền dạy, do đó các bậc cao nhân đã chỉnh sửa, xuất bản 2 cuốn bí kíp dễ hiểu hơn cho hậu thế là Head First Design Patterns và Design Patterns For Dummies. Thuở xưa khi đặt bước chân đầu tiên trên con đường cầu đạo-cạo đầu, bần đạo cũng tự tu luyện từ hai cuốn bí kiếp này. Các đạo hữu có thể lên mạng tải về ngâm cứu.
Khẩu quyết nhập môn Design Pattern
Có khá nhiều chiêu thức design pattern lưu lạc trong chốn giang hồ, song ta có thể tạm phân loại làm Tam Thức:
- Khởi Thức (Creational Design Pattern): Liên quan đến việc khởi tạo object. VD: Factory, Object Pool, Abstract Factory, Builder.
- Cấu Thức (Structure Design Pattern): Liên quan đến kết cấu, liên hệ giữa các object. VD: Adapter, Bridge, Decorator, Proxy, Composite, Facede.
- Vi Thức (Behavioral Design Pattern): Liên quan tới hành vi của các object. VD: Iterator, Mementor, Strategy, Template Method, Visitor.
Khẩu quyết một chiêu thức Design Pattern thường có 3 phần. Khi muốn học một design pattern mới, hãy tập trung chú ý vào 3 phần này:
- Thức Đề: Vấn đề mà design pattern đó giải quyết
- Thức Đồ: Sơ đồ UML mô tả design pattern
- Thức Phổ: Code minh họa
Dưới đâu là một Design pattern đơn giản nhất mà hầu như học sĩ nào cũng biết: Đơn Thân Độc Mã, thuộc Khởi Thức, hay còn gọi là Singeton, thuộc loại Creational Design Pattern.
- Thức Đề: Design Pattern này được dùng khi ta muốn đảm bảo chỉ có duy nhất một object được sinh ra trong toàn hệ thống.
- Thức Đồ:
- Thức Phổ:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Singleton { | |
private static final Singleton INSTANCE = new Singleton(); | |
private Singleton() {} | |
public static Singleton getInstance() { | |
return INSTANCE; | |
} | |
} |
Thay lời kết
Xin nhắc lại một lần nữa: Design Pattern được tạo ra để giải quyết vấn đề, chứ không phải để phức tạp hóa nó. Các bậc cao nhân có câu: nước có thể dâng thuyền, cũng có thể lật thuyền. Design Pattern có thể giải quyết vấn đề, cũng có thể làm nó rắc rối phức tạp hơn.
Kẻ sĩ dùng design pattern cũng chia làm ba cảnh giới. Kẻ sơ nhập thì nhìn đâu cũng thấy pattern, chỉ lo áp dụng, nhét rất nhiều pattern vào mà không quan tâm đến thiết kế. Lăn lộn giang hồ một thời gian, đến cảnh giới cao thủ, sẽ học được rằng khi nào cần dùng pattern, khi nào không. Đến cấp bậc đại sư, chỉ dùng pattern khi đã rõ lợi hại của nó, biết lấy sự đơn giản hài hòa của design tổng thể làm trọng. Có thể tổng kết quá trình này bằng một câu:
Khi chưa học đạo, ta thấy núi là núi, sông là sông. Khi mới học đạo, ta thấy núi không phải là núi, sông không phải là sông. Sau khi học đạo, ta lại thấy núi chỉ là núi, sông chỉ là sông.
Đây là bài viết đầu tiên của blog trong series về design pattern. Do là bài đầu nên viết theo phong cách kiếm hiệp để thu hút bạn đọc thôi, những bài viết sau trong series sẽ quay lại phong cách bình thường nhé. Chém gió tốn nhiều nơ ron não lắm, cứ viết kiểu này có khi tác giả tẩu hỏa nhập ma, hồn phi phách tán chứ chẳng chơi :'(. Bạn nào thích bài viết theo phong cách này có thể đọc bài Luận về comment code nhé.
Ngoài ebook, các bạn có thể tìm hiểu thêm về design pattern ở đây.
30s quảng cáo
Đây là một bài viết được trích dẫn từ cuốn sách “Code dạo kí sự – Lập trình viên đâu phải chỉ biết code” do mình viết. Quyển sách bao gồm những kĩ năng từ mềm đến cứng mà mỗi developer phải có, đảm bảo sẽ rất có ích cho các bạn sinh viên hoặc lập trình viên đã đi làm. Các bạn xem thông tin và đặt mua sách tại đây nhé: Sách Code Dạo Ký Sự.
Cảm ơn tác giả về bài viết rất hay, phong cách kiếm hiệp tuyệt
Kê gạch ngồi hóng tiếp
LikeLike
Mình rất thích phong cách viết blog kiếm hiệp này của bạn, mong bạn sẽ có nhiều bài viết hay và bổ ích như thế này nữa nhé. Thank you for you!
LikeLike
Bài viết mở đầu rất phong cách. Trước khi các hạ viết về Design Pattern, có thể viết sơ qua về UML dc không.
LikeLike
UML trường nào cũng dạy, và hầu như nó khá buồn ngủ nên mình ko muốn viết bạn à :((
LikeLiked by 1 person
Gần đây mình đang tìm hiểu về Big Data, bạn có biết quyển sách nào hay giới thiệu giúp mình được không.
LikeLike
Bài viết hay lắm, rất thích phong cách viết của anh. Em là sinh viên IT năm nhất, nhờ có anh Hoàng mới biết được muốn làm lập trình viên phải học rất nhiều thứ. Trước đây cứ tưởng học ngôn ngữ là giỏi chứ có biết Design Pattern là cái mô tê gì đâu.
LikeLike
Đọc bài của anh Hoàng cười muốn bể bụng nhưng em thấy nể anh lắm 🙂 hẳn là người vui tính
LikeLiked by 1 person
Tại hạ cũng đang nghiền cuốn Gang of four , đọc bài này xong có động lực tiếp tục , hóng bài tiếp theo , đa tạ :v
LikeLike
đa tạ tiềm bối đã cho tại hạ biết được con đường học đạo trong ngành lập trình này, hi vọng tiềm bối có thêm nhiều bài viết theo phong cách này nữa để tại hạ và các huynh đệ khắp thiên hạ trong giới code-lâm có thêm nhiều cơ hội nâng cao khả năng. Nếu được vậy tại hạ vô cùng cảm kích!
LikeLike
Tác giả viết hay quá hehe :Đ
LikeLike
Mình rất mong chờ chuỗi bài này của bạn, DP có thể hiểu dễ thôi nhưng áp dụng lúc nào mới thể hiện trình độ :))
LikeLike
Hy vọng sẽ sớm có Khởi Thức – Bí Kiếp
LikeLike
Đọc blog của anh thấy thích ghê, toàn thông tin bổ ích, cảm thấy tâm huyết và “độ trải nghiệm thực tế – lăn lộn Tin trường” của anh dữ dội biết chừng nào. Cám ơn anh :))
LikeLike
Cảm ơn bạn đã ủng hộ nhé 😀
LikeLike
Anh oi, ra tiep bai ve series nay di. (sr em khong dung unikey)
LikeLike
Khi nào có hứng thì mình viết tiếp bạn nhé 😉
LikeLike
Tại hạ thật sự khâm phục các hạ quá đi à. Phải đọc từng chữ không được bỏ sót câu nào :))
LikeLike
Tại hạ khâm phục các hạ quá đi mà. Các hạ hãy viết theo phong cách kiếm hiệp đi hả. Vừa đọc hiểu vừa đọc vui đó mà 😀
LikeLike
Hay lắm, cám ơn code dạo. =)))
LikeLike
Tại hạ tình cờ đi ngang qua chốn này! Thấy các vị huynh đệ cùng các tỉ muội xôn xao bàn tán bèn mạn phép ghé vào cho thỏa lòng soi mói. Giật mình, kinh ngạc khi thấy lời nói của các vị vô cùng sắc bén, ngữ ngôn truyền cảm, thiết nghĩ Độc Cô Cầu Bại ngày xưa có đội mồ sống dậy cũng thêm phần nể sợ. Nay xuất hiện thêm nhiều anh hùng code dạo như thế này cũng khiến cho tại hạ mở mang tầm mắt, học hỏi được nhiều điều. Nếu các vị huynh đệ đây không cảm thấy phiền nhiễu thì với một cú Click chuột chúng ta hãy kết nghĩa bàn thờ, à không bàn đào! Ngày hôm nay được gặp các vị huynh đệ, các vị tỉ muội ở đây cũng là phước phần cho tại hạ. Xin nhận của tại hạ một like gọi là để kết nghĩa thâm giao! :v
LikeLiked by 5 people
Tuyệt, rất mong có những bài hướng dẫn như thế này. Cảm ơn bạn chủ thớt rất nhiều.
LikeLike
Keywork: Design Pattern for Dummies Tiếng Việt
có người dịch cuốn này rồi, đọc như đọc truyện rất hay, mọi người lên google download về đọc
LikeLike
Cute quá bạn! Liên hệ thú vị lắm.
LikeLike
hay lắm, viết thêm nhiều nữa đi bạn ơi.
thank you
LikeLike
Bài viết hay.
Tác giả thể hiển kiến thức uyên thâm, ngôn ngữ phong phú.
Đọc quả thật thấy mát vô cùng.
Mong chủ thớt tiếp tục series cho anh em võ lâm mở rộng tầm mắt.
LikeLiked by 1 person
Bạn có thể theo dõi series JS Truyền Kì gần đây của blog nhé 😉
LikeLike
đa tạ tiền bối, tại hạ như được mở rộng tầm mắt
LikeLike
mình sẽ học chơi game xem nó ntn. muahaha
LikeLiked by 1 person
Hic đi làm lâu rồi mà đến giờ vẫn chưa bik đc design pattern, đọc sach cũng k hiểu đc 😦
LikeLiked by 1 person
đọc DP nó cứ mông lung sao sao ý 😦
LikeLike