papj_girl_kool

New Member

Download miễn phí Bài giảng Tạo và mở rộng một đối tượng với mẫu decorator và factory





XÂY DỰNG MẪU NHÀ MÁY FACTORY ĐẦU TIÊN
Nhiều lập trình viên biết cách thức mà đối tượng nhà máy factory làm việc. Họ nghĩ đơn giản
rằng, bạn có một đối tượng làm nhiệm vụ tạo ra đối tượng khác. Đó là cách mà đối tượng
factory thường được tạo ra và sử dụng, tuy nhiên nó còn làm được nhiều hơn thế. Chúng ta
hãy nhìn vào cách thông thường khi tạo một đối tượng nhà máy factory trước, sau đó xem xét
định nghĩa chính xác từ sách của GOF, theo định nghĩa mà đối tượng nhà máy factory sẽ có
nhiều điểm khác, nhiều sự uyển chuyển hơn



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

CHƢƠNG III: TẠO VÀ MỞ RỘNG MỘT ĐỐI
TƢỢNG VỚI MẪU DECORATOR VÀ FACTORY
Trong chương này, chúng ta sẽ thảo luận về một số nội dung sau:
 Giữ vững nguyên tắc viết mã “Open-Close” hay “Luôn mở cho việc mở rộng, nhưng
đóng cho việc sửa đổi”
 Giới thiệu về mẫu trang trí Decorator
 Các ví dụ về mẫu trang trí Decorator
 Xây dựng các đối tượng với mẫu nhà máy Factory
 Đóng gói việc khởi tạo đối tượng bằng mẫu nhà máy Factory
 Sử dụng các cách khởi tạo nhà máy Factory Method
Bạn đang làm nhân viên tư vấn Thiết Kế Mẫu tại công ty GigantoComputer, với mức lương khá
cao và bạn đang ở trong căn tin công ty.
“Hôm nay có món gì?” bạn hỏi tay đầu bếp khó chịu đang đứng sau bếp nướng.
“Cho một cái hamburger,” bạn nói và xoay xoay cái khay trong tay.
Người đầu bếp mang cái hamburger đến bàn tính tiền, không quên hỏi lại “Có thêm thịt rán
không?”
“Chắc chắn rồi”, bạn nói.
Người đầu bếp xóa các phiếu ăn cũ trên máy tính tiền và khởi động lại.
“Hamburger và thịt rán”. Vừa nói anh ta vừa gõ vào máy tính tiền.
“Cho thêm một ít pho mát” Bạn nói.
Người đầu bếp ném một ánh nhìn khó chịu , xóa cái phiếu ăn, mổ mổ cái bàn phím và nói
“Hamburger với pho mát và thịt nướng. Ok. Đủ rồi chứ?”
“Hmm”, bạn nói, nhìn quét qua cái thực đơn “Hay là thêm một chút thịt xông khói?”
Người đầu bếp nhìn chằm chằm vào bạn và dường như định văng ra một vài câu khó chịu gì đó
nhưng vẫn nhập phiếu ăn vào máy.
“Hey”, bạn nói. “Anh chắc chắn là được lợi nhiều hơn từ việc sử dụng mẫu thiết kế trang trí
Decorator chứ hả?”
“Vâng”, anh đầu bếp nói, ngạc nhiên khi bạn nói về vấn đề này “tui đã nói vấn đề này cả ngàn
lần rồi”
Bạn cầm cái Hamburger pho mát thịt xông khói với vẻ hạnh phúc và nói “Thêm một vài lát cà
chua nữa thì tuyệt!”
Chương này nói về hai mẫu thiết kế quan trọng, nó sẽ lắp đầy những thiếu sót trong việc lập
trình hướng đối tượng cơ bản, đặc biệt là ở khả năng kế thừa. Đây là hai mẫu trang trí
Decorator và mẫu nhà máy Factory.
Mẫu trang trí Decorator là lựa chọn hoàn hảo cho tình huống tui vừa nêu ở trên bởi vì ta đang
nói về khả năng mở rộng chức năng cho một lớp có sẵn. Sau khi viết một lớp, bạn có thể thêm
phần trang trí Decorator (các lớp mở rộng) để mở rộng lớp này. Khi đó bạn không phải sửa đổi
lên lớp gốc. Kết quả là cái Hamburger của bạn trở thành Hamburger pho mát, rồi Hamburger
pho mát thịt xông khói, mọi thứ thật dễ dàng.
Nguyên lý “Mở cho việc mở rộng. Đóng cho việc sửa đổi”
Một trong những khía cạnh quan trọng nhất trong quá trình phát triển một ứng dụng là các
nhà phát triển và lập trình viên phải đối đầu với sự thay đổi, và đó là lý do vì sao các mẫu thiết
kế này lại được giới thiệu trước tiên. Có thể nói các Mẫu Thiết Kế sẽ giúp bạn giải quyết được
các sự thay đổi, và bạn có thể dễ dàng chuyển đổi mã nguồn của mình cho các trường hợp mới
và bất khả kháng. Như tui đã nói qua trong suốt cuốn sách này,lập trình viên thường tiêu tốn
thời gian cho việc mở rộng và thay đổi mã nguồn hơn là phát triển mã nguồn gốc.
Mẫu chiến lược Strategy đã được giới thiệu trước đây trong chương II, giúp bạn xử lý những sự
thay đổi bằng cách cho phép bạn chọn lựa một thuật toán thích hợp từ một tập hợp thuật toán
bên ngoài hơn là phải viết lại mã nguồn. Mẫu trang trí Decorator cũng tương tự vậy, nó cho
phép bạn viết tiếp mã nguồn, tránh việc sửa đổi lên mã nguồn gốc, trong khi vẫn đáp ứng
được yêu cầu thay đổi. Đó là điểm chính yếu tui muốn nhấn mạnh.
Ghi nhớ:Hãy làm cho mã nguồn của bạn đáp ứng được nguyên tắc “Luôn đóng cho sự chỉnh
sửa, và luôn mở cho việc mở rộng” càng nhiều càng tốt. Nói cách khác, hãy thiết kế mã nguồn
sao cho không cần thay đổi gì nhiều nhưng luôn có thể mở rộng khi cần.
Đây là một ví dụ cho việc viết mã nguồn luôn đóng cho sự thay đổi.
Công ty mà bạn đang làm tư vấn, công ty GigantoComputer, quyết định làm một cái máy vi
tính mới.
Đây là mã nguồn của lớp Computer:
Khi một đối tượng computer được khởi tạo. cách description sẽ trả về văn bản “You’re
getting a computer.” . Tới giờ mọi việc vẫn tốt đẹp. Nhưng một số khách hàng quyết định rằng
họ muốn có một cái đĩa cứng trong máy tính. “Không vấn đề gì cả” Các lập viên trong công ty
đáp. “ Chúng ta chỉ cần chỉnh sửa mã nguồn lại một chút như sau:”
Bây giờ khi một đối tượng computer được tạo và bạn gọi cách description, bạn sẽ nhận
được văn bản “You’re getting a computer and a disk.” Nhưng một vài khách hàng vẫn chưa hài
lòng. Họ muốn thêm một cái màn hình nữa. Và thế là các lập trình viên phải chỉnh sửa tiếp như
sau:
Bây giờ, khi bạn tạo một computer và gọi cách description bạn sẽ thấy
Bạn có thể thấy vấn đề ở đây: Các lập trình viên phải thay đổi mã nguồn mỗi khi khách hàng
thay đổi yêu cầu của họ. Rõ ràng, đó là vấn đề chính.
Và bạn, với cương vị là tư vấn mẫu thiết kế, sẽ chỉnh sửa nó.
MẪU TRANG TRÍ DECORATOR?
tui phải nhắc lại một lần nữa: càng nhiều càng tốt, hãy viết mã nguồn của bạn đóng cho việc
sửa đổi, nhưng mở cho việc mở rộng. Trong chương II, bạn đã biết cách làm việc với mẫu
chiến lược Strategy. Đó là, bạn đóng gói mã nguồn vào các thuật toán riêng biệt để sử dụng dễ
dàng, hơn là việc xử lý chúng thông qua các lớp con.
Mẫu trang trí Decorator có một cách tiếp cận khác. Thay vì sử dụng một thuật toán bên ngoài,
mẫu thiết kế này sử dụng một phương pháp “bao bọc” mã nguồn của bạn để mở rộng chúng.
Ghi nhớ: Định nghĩa chính thức của mẫu trang trí Decorator trong sách của GoF có viết:
“Gắn kết thêm một số chức năng cho đối tượng một cách linh động. Mẫu trang trí Decorator
cung cấp một phương pháp linh hoạt hơn là sử dụng lớp con để mở rộng chức năng cho đối
tượng”
Mẫu thiết kế này được gọi là “Người trang trí” Decorator nhưng dường như đó là tên gọi rườm
rà. Một cái tên tốt hơn cho mẫu này có thể là “Người tăng thêm” Augmentor hay “Người mở
rộng” Extender bởi vì nó cho phép bạn: tăng thêm hay mở rộng một lớp một cách linh động khi
chương trình được thực thi. Tuy nhiên, như bạn thấy trong chương này, thuật ngữ “Người trang
trí” Decorator còn giúp bạn hiểu rõ hơn khái niệm “đóng cho việc chỉnh sửa, mở cho việc mở
rộng”. Khi bạn làm hành động bao bọc mã nguồn để mở rộng thêm chức năng, bạn không cần
thiết chỉnh sửa lại mã nguồn cũ, bạn chủ yếu tập trung vào việc trang trí nó.
Và đây là cách mà nó làm việc. Bạn bắt đầu với một cái máy tính computer đơn giản sau:
Khi bạn gọi cách description, bạn nhận được kết quả “You’re getting a computer”. Bây
giờ bạn muốn thêm ít phần cứng, một ổ cứng mới chẳng hạn. Trong trường hợp này, bạn có
thể thêm một lớp bao bọc wrapper như sau:
Bây giờ khi bạn gọi cách description của lớp bao bọc wrapper, nó sẽ gọi phươn...
 

Các chủ đề có liên quan khác

Top