Design patterns

Giới thiệu Design Pattern

Trong lúc nói chuyện với bạn bè, mình có bất chợt nhắc đến design pattern thì nhận được câu trả lời là “Chẳng nhớ gì, cũng chẳng áp dụng được gì”. Chính vì thế, mình muốn làm một loạt bài về chủ đề này để những bạn mới bắt đầu học có thể tham khảo, cũng như bản thân và anh em, bạn bè khi cần có thể tra cứu lại.

Các design pattern vô cùng hữu ích trong công việc phát triển phần mềm. Nếu mở code của framework hay thư viện ra đọc, bạn sẽ nhận ra họ đang áp dụng pattern này, pattern kia. Tuy nhiên, các chương trình học thường xem nhẹ sự cần thiết của chúng. Hồi mình còn đi học, nói chung chưa môn nào dạy cái này cả. Ở trường mình, có lẽ lứa của mình là lứa đầu tiên được cô giáo nhắc đến design pattern một cách nghiêm túc. Không biết các chương trình học bây giờ đã cập nhật thêm chưa.

Trên mạng mình cũng đã thấy một số trang nói về design pattern nhưng có những điểm mình chưa hoàn toàn đồng ý. Loạt bài này của mình có thể coi như một mảng màu khác góp vào bức tranh chung để các bạn có nhiều nguồn tiếp cận.

DESIGN PATTERNS

Design pattern là gì?

Để cho đầy đủ, chuẩn chỉ, có lẽ bạn nên đọc trên Wikipedia:

In software engineering, a software design pattern is a general, reusable solution to a commonly occurring problem within a given context in software design. It is not a finished design that can be transformed directly into source or machine code. Rather, it is a description or template for how to solve a problem that can be used in many different situations. Design patterns are formalized best practices that the programmer can use to solve common problems when designing an application or system.

Tuy nhiên, hãy thử diễn giải theo một cách khác xem sao.

“Code đạo” cũng như kiếm đạo, mục tiêu cuối cùng là để cho bản thân tráng kiện, khiến địch thủ phải lãnh thất bại khi tấn công mình. Thế nhưng, làm sao để tráng kiện, làm sao để chiến thắng thì không phải ai cũng biết. Thứ mà chư vị đồng đạo cần vô cùng là một cuốn bí kíp chỉ đường dẫn lối. Hiểu được điều đó, từ xưa, các bậc cao nhân đã dựa vào võ học uyên thâm mà đúc rút thành khẩu quyết S.O.L.I.D (mà mình muốn nói đến ở một bài khác). Tiếp theo, họ diễn giải ra thành nhiều chiêu thức, gọi chung là “Độc cô cửu kiếm”, à nhầm, là “Design Patterns”. Mỗi pattern là một chiêu thức, đã được khảo cứu kỹ lưỡng, để đối phó với từng loại kẻ địch cụ thể.

Kẻ hậu bối như chúng ta bước vào giang hồ với tráng chí lớn tựa chim hồng hộc, muốn nuốt trọn bầu trời bao la vào trong bụng. Nhưng hỡi ôi, khi đối diện với những đại ma đầu, à lại nhầm, những khách hàng thân thiện của chúng ta, thấy họ tung ra những specs khó nhằn thì không khỏi hoang mang. Chẳng hiếm gì những thiếu hiệp buổi đầu lòng phơi phới mà rồi dần dà lâm trận tim đập chân run, không hiểu đây là chiêu thức quái quỷ gì để mà đấu lại. Hơn nữa, minh thương dễ tránh, ám tiễn khó phòng. Cứ cho là anh dễ dàng đối phó với những đòn trực diện, vậy còn những thế hiểm, những cú đánh ngầm thì sao? Khi anh mới bắt đầu code thì chưa thấy đâu, cơ mà đến ngày deliver hay lúc maintain nó mới ló mặt ra.

Vì chúng ta thiếu kinh nghiệm chiến đấu như thế nên khi học được các chiêu thức tiền nhân để lại thì chẳng khác nào nắng hạn gặp mưa rào. Gặp kẻ địch này thì dùng chiêu này ứng phó. Gặp kẻ địch kia thì dùng chiêu kia ứng phó. Cứ vậy mà liên miên bất tuyệt như nước chảy mây trôi. Mỗi chiêu, mỗi thức đều đã được bao nhiêu chí sĩ kinh qua thực chiến nên khỏi cần lo chúng chỉ là những món võ mèo cào vô dụng.

Bên cạnh sự đảm bảo về mãnh lực không thể chối cãi, cái hay nữa của các design pattern là việc dùng những cái tên dễ hiểu chứ không phải những khái niệm lằng nhằng. Bởi thế, học nó cũng sẽ thú vị lên nhiều.

Có những design pattern nào?

Có một vài sự khác biệt và tranh cãi khi liệt kê các design pattern. Trong loạt bài này, mình xin trình bày 26 pattern, chia thành 3 nhóm.

Creational patterns

Những pattern này nói về việc khởi tạo: khởi tạo lớp (class) hoặc khởi tạo đối tượng (object). Có 6 pattern:

  • Singleton
  • Abstract Factory
  • Builder
  • Factory Method
  • Object Pool
  • Prototype

Structural patterns

Những pattern này nói về cấu trúc của lớp và đối tượng. Chức năng khác nhau cần cấu trúc khác nhau. Có 8 pattern:

  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Facade
  • Flyweight
  • Private Class Data
  • Proxy

Behavioral patterns

Những pattern này nói về tương tác giữa các đối tượng. Có 12 patterns:

  • Chain of responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Null Object
  • Observer
  • State
  • Strategy
  • Template method
  • Visitor

Đôi lời mạn đàm

Nếu bạn là fan của Kim Dung, hẳn sẽ nhớ Phong Thanh Dương lão tiền bối đã nói với Lệnh Hồ Xung thế này trong Tiếu ngạo giang hồ (hoặc bạn không nhớ cũng chẳng sao).

Chiêu số là chết. Người phát chiêu mới sống. Chiêu số chết phá giải kỳ tuyệt đến đâu mà khi gặp người sống liền chịu bó tay thì chỉ còn đường để mặc người ta chu lục. Vậy ngươi phải luôn nghĩ đến chữ “sống”. Học và sử dụng đều cần hướng đến chiêu số sống. Nếu cứ ỳ ra như cục đất không biết biến hoá thì dù có thuộc hàng nghìn chiêu số chết mà gặp phải tay cao thủ chân chính là bị họ phá giải sạch sành sanh.

Làm phần mềm, hay làm việc gì cũng vậy, nếu chỉ thuộc lòng các pattern mà không biết ứng biến thì cũng khó hoàn thành công việc cho được đẹp tốt. Mình chẳng dám khuyên các bạn đọc hết các pattern rồi quên đi, lấy vô chiêu thắng hữu chiêu. Cái cảnh giới thượng thừa ấy, kẻ phàm phu như chúng ta đến khi nào mới đạt tới đây? Tuy nhiên, áp dụng vào thực tiễn ra sao, kết hợp pattern thế nào, chuyện đó chớ nên cứng nhắc. Hãy tuỳ duyên, chỗ nào không làm được ngay thì đừng cố quá.

Hãy chờ 26 bài tiếp theo về từng pattern nhé! Hy vọng nó sẽ có ích cho các bạn.

3 bình luận trong “Giới thiệu Design Pattern”

  1. Hey there, I just found your site, quick question…

    My name’s Eric, I found kinhnghiemlaptrinh.com after doing a quick search – you showed up near the top of the rankings, so whatever you’re doing for SEO, looks like it’s working well.

    So here’s my question – what happens AFTER someone lands on your site? Anything?

    Research tells us at least 70% of the people who find your site, after a quick once-over, they disappear… forever.

    That means that all the work and effort you put into getting them to show up, goes down the tubes.

    Why would you want all that good work – and the great site you’ve built – go to waste?

    Because the odds are they’ll just skip over calling or even grabbing their phone, leaving you high and dry.

    But here’s a thought… what if you could make it super-simple for someone to raise their hand, say, “okay, let’s talk” without requiring them to even pull their cell phone from their pocket?

    You can – thanks to revolutionary new software that can literally make that first call happen NOW.

    Talk With Web Visitor is a software widget that sits on your site, ready and waiting to capture any visitor’s Name, Email address and Phone Number. It lets you know IMMEDIATELY – so that you can talk to that lead while they’re still there at your site.

    You know, strike when the iron’s hot!

    CLICK HERE http://www.talkwithwebvisitors.com to try out a Live Demo with Talk With Web Visitor now to see exactly how it works.

    When targeting leads, you HAVE to act fast – the difference between contacting someone within 5 minutes versus 30 minutes later is huge – like 100 times better!

    That’s why you should check out our new SMS Text With Lead feature as well… once you’ve captured the phone number of the website visitor, you can automatically kick off a text message (SMS) conversation with them.

    Imagine how powerful this could be – even if they don’t take you up on your offer immediately, you can stay in touch with them using text messages to make new offers, provide links to great content, and build your credibility.

    Just this alone could be a game changer to make your website even more effective.

    Strike when the iron’s hot!

    CLICK HERE http://www.talkwithwebvisitors.com to learn more about everything Talk With Web Visitor can do for your business – you’ll be amazed.

    Thanks and keep up the great work!

    Eric
    PS: Talk With Web Visitor offers a FREE 14 days trial – you could be converting up to 100x more leads immediately!
    It even includes International Long Distance Calling.
    Stop wasting money chasing eyeballs that don’t turn into paying customers.
    CLICK HERE http://www.talkwithwebvisitors.com to try Talk With Web Visitor now.

    If you’d like to unsubscribe click here http://talkwithwebvisitors.com/unsubscribe.aspx?d=kinhnghiemlaptrinh.com

  2. My name’s Eric and I just found your site kinhnghiemlaptrinh.com.

    It’s got a lot going for it, but here’s an idea to make it even MORE effective.

    Talk With Web Visitor – CLICK HERE http://www.talkwithwebvisitors.com for a live demo now.

    Talk With Web Visitor is a software widget that’s works on your site, ready to capture any visitor’s Name, Email address and Phone Number. It signals you the moment they let you know they’re interested – so that you can talk to that lead while they’re literally looking over your site.

    And once you’ve captured their phone number, with our new SMS Text With Lead feature, you can automatically start a text (SMS) conversation… and if they don’t take you up on your offer then, you can follow up with text messages for new offers, content links, even just “how you doing?” notes to build a relationship.

    CLICK HERE http://www.talkwithwebvisitors.com to discover what Talk With Web Visitor can do for your business.

    The difference between contacting someone within 5 minutes versus a half-hour means you could be converting up to 100X more leads today!

    Eric
    PS: Studies show that 70% of a site’s visitors disappear and are gone forever after just a moment. Don’t keep losing them.
    Talk With Web Visitor offers a FREE 14 days trial – and it even includes International Long Distance Calling.
    You have customers waiting to talk with you right now… don’t keep them waiting.
    CLICK HERE http://www.talkwithwebvisitors.com to try Talk With Web Visitor now.

    If you’d like to unsubscribe click here http://talkwithwebvisitors.com/unsubscribe.aspx?d=kinhnghiemlaptrinh.com

Trả lời

Email của bạn sẽ không được hiển thị công khai.