Bài viết được sự cho phép của tác giả Nguyễn Thảo
Xin chào các bạn, bài viết hôm nay mình sẻ giới thiệu đến các bạn Factory Design Pattern dùng thế nào trong lập trình C#, Winform.
[C#] How to using Factory Design Pattern
Factory Pattern là một design pattern thuộc nhóm khởi tạo (Creational patterns).
Pattern này được sinh ra nhằm mục đích khởi tạo một đối tượng mới mà không cần thiết phải chỉ ra một cách chính xác class nào sẽ được khởi tạo.
Factory Method Pattern giải quyết vấn đề này bằng cách định nghĩa một factory method cho việc tạo đối tượng, và các lớp con thừa kế có thể override phương thức này để chỉ rõ đối tượng nào sẽ được khởi tạo.
Bây giờ, mình sẽ có một ví dụ, cho các bạn dễ hiểu về factory design pattern này.
Mình có yêu cầu viết một ứng dụng, nạp tiền điện thoại cho các mạng điện thoại Việt Nam: Mobifone, VinaPhone, Viettel, Vietnamobile, Gmobile.
Request yêu cầu gởi đến ứng dụng của chúng ta gồm 2 tham số: số thoại cần nạp tiền và số tiền.
Thường trong bài viết này, chúng ta sẽ sử dụng một thiết bị modern GMS và sử dụng tập lệnh AT-Command xài lệnh USSD để nạp tiền vào tài khoản cho người dùng.
Nhưng có rắc rối ở đây là mỗi nhà mạng, đều có cấu trúc kiểm tra số dư tài khoản, hay cú pháp nạp tiền đều khác nhau.
Vậy làm sao khi gởi đến chúng ta sẽ điều hướng cho từng class nhà mạng.
Sơ đồ Design Pattern:
Đầu tiên, mình sẽ tạo một InterFace INetwork.cs
C#:
Trong này mình khai báo ba phương thức sẵn: lấy tên nhà mạng, kiểm tra số dư tài khoản, và lấy đầu số của mỗi nhà mạng.
Tiếp đến mình sẽ tạo 5 class cho mỗi nhà mạng: viettel.cs, mobifone.cs, vinaphone.cs, vietnamobile.cs, gmobile.cs
Mỗi class này mình đều implement đến interface INetwork
- Viettel.cs
2. Mobifone.cs
3. Vinaphone.cs
4. Vietnamobile.cs
5. Gmobile.cs
Tiếp đến mình sẽ tạo một Enum NetworkType.cs
Tạo một class abstract NetworkFactory.cs:
Tiếp đến là một class ConcreteCreator.cs để điều hướng cho từng nhà mạng:
Và bây giờ chúng ta sẽ sử dụng hàm trong form program.cs
Và dưới đây là kết quả khi chúng ta chạy ứng dụng:
Bây giờ, các bạn muốn viết hàm gì chung xử lý cho từng nhà mạng điện thoại, các bạn chỉ cần khai báo tên hàm vào Interface INetwork.cs.
Và sau đó các bạn vào từng class nhà mạng Override lại phương thức để thực hiện theo mong muốn của mình.
Hy vọng bài viết sẽ giúp ích được cho các bạn.
Thanks for watching!
Bài viết gốc được đăng tải tại laptrinhvb.net
Có thể bạn quan tâm:
- Design pattern là gì? Tại sao nên sử dụng Design pattern?
- Repository design pattern hoàn thiện trong Laravel
- 3 sai lầm khi làm việc các lập trình viên nên tránh
Xem thêm các việc làm designer hấp dẫn tại TopDev