Một design pattern trong C++ giúp bảo trì code ngon ngọt

2950

Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh

Hellu! Lại là tôi đây. Trong bài trước chúng ta đã học về 1 design biến hoá việc kế thừa thành việc bao hàm. Nghĩa là mặc dù kế thừa là hay nhưng trong trường hợp đó nó lại đâm ra dở. Tách biệt chức năng không phụ thuộc lớp A vào lớp B. Khi cần thì lớp B có thể chứa lớp A và sử dụng các chức năng của nó. Design đó tôi nêu tên cho các bạn đánh index trong đầu: Strategy =))

Hôm nay chúng ta có 1 trường hợp như sau. Có 1 anh chàng. Lúc học cấp 3 anh ta chỉ cần cô ấy là gái, nói chuyện vui là yêu được.  Sau khi lên DH, anh ta sống trong cảnh xa nhà, mì tôm gặm suốt ngày. Anh ta bắt muốn yêu các cô gái có mông to đễ khoã lấp nỗi cô đơn. Rồi anh ta đi làm, anh ta kiếm được  tiền nên anh ta nâng tiêu chí người yêu là phải có ngực to nữa. Ngực to không lo chết đói =))

  1001 Tips: Con trỏ và hàm (Pointer & Function) trong C++

  30 tiện ích Chrome cho designer và dev

Trong lập trình cũng gặp hoàn cảnh tương tự. Ban đầu khách hàng yêu cầu tính năng A, sau đó đòi thêm B, rồi C. Rồi một ngày đẹp trời nào đó, ông khách này lại muốn bỏ B đi. =)) Rất là mệt mỏi .. Vậy chúng ta phải tạo liên kết giữa các lớp một cách mềm dẻo, sao cho việc bảo trì là đơn giản nhất.

Tìm việc làm C++ nhanh chóng trên TopDev

Vậy thì các bạn thiết kế 1 lớp cha làm sao cho bon con cái kế thừa có thể cùng chung vỏ mà tính tình mỗi thằng khác nhau, tránh trường hợp đổ vỏ con nhà hàng xóm =))

Vậy đầu tiên trong lớp Mylove, các bạn cần  hàm virtual để các lớp con kế thừa như sau:

Một design pattern trong C++ giúp bảo trì code ngon ngọt

Ở đây các bạn cũng không cần virtual thuần ảo, không bắt buộc lớp con kế thừa lại hàm getDesscripttion này.

Sau đó tôi tạo thêm 1 lớp wrap lại các tính chất như mông, ngực… cho các lớp tính chất phát triển về sau:

Một design pattern trong C++ giúp bảo trì code ngon ngọt

OK, bây giờ các lớp tính chất chúng ta sẽ kế thừa từ lớp này. Ví dụ tôi làm lớp Mông trước:
Một design pattern trong C++ giúp bảo trì code ngon ngọtTrong lớp trên, hàm getDescription được kế thừa lại, mô tả lại là mông phải to. Chứ mông lép là anh này anh hổng có yêu  :3

Rồi tương tự ta làm lớp Ngực:

Một design pattern trong C++ giúp bảo trì code ngon ngọt

Và bây giờ là demo. Trong hàm main ta triển khai như sau:
Một design pattern trong C++ giúp bảo trì code ngon ngọt

Kết quả chương trình như sau:

Một design pattern trong C++ giúp bảo trì code ngon ngọt

Rồi sau đó anh ta lại nâng tiêu chí mông lên. Anh ta new 1 tính chất mới về mông:

Một design pattern trong C++ giúp bảo trì code ngon ngọt

Kết quả:

Một design pattern trong C++ giúp bảo trì code ngon ngọt

Một thời gian anh ta lại muốn ngực to =))

Code thêm như sau:

Một design pattern trong C++ giúp bảo trì code ngon ngọt

Kết quả:

Một design pattern trong C++ giúp bảo trì code ngon ngọt

Ok, vậy rõ ràng các bạn thấy việc bảo trì nâng cấp code rất đơn giản, chỉ cần tạo thêm lớp mới là ok. Đây chỉ là phần design sơ khai và cũng dễ hiểu. Cái này có tên là DECORATOR =))

Thanks đã đọc 

Full code tải tại đây

Happy =))

Bài viết gốc được đăng tải tại quynhlaptrinhc.wordpress.com

Có thể bạn quan tâm:

Xem ngay những tin đăng tuyển dụng IT mới nhất trên TopDev