Abstract Factory Pattern Là Gì, Abstract Factory Pattern

Factory Pattern – Hãy sẵn sàng chuẩn bị sẵn sàng chuẩn bị “đón nhận” một trong những kiến thiết OO “kết hợp lỏng lẻo”

Có khá nhiều thứ để rất có thể tạo nên đối tượng người dùng người sử dụng người sử dụng thay thế sửa chữa vì cần sử dụng toán tử new. Với Factory Pattern những các bạn sẽ học được rằng khởi tạo là một trong trong hoạt động chưa phải lúc nào cũng khá được tiến hành triển khai thi công công khai minh bạch, và điều này thường dẫn tới những vấn đề về sự việc việc phụ thuộc. Và bạn không thể yêu cầu điều này, phải không? Tìm hiểu tạo ra sự sao Factory Pattern rất có chức năng giúp cho bạn khỏi sự phụ thuộc trong số những lớp. Bài Viết: Abstract factory pattern là gì
*
Khi tất cả chúng ta cảm nhận từ khóa “new”, hãy nghĩ về những lớp con. Vâng, khi tất cả chúng ta cần sử dụng new, bạn vật chứng và chứng minh và khẳng định đang tạo một object của lớp con, chính vì như vậy, vật chứng và chứng minh và khẳng định là một trong trong “programing to implement” (Khái niệm này được nhắc ở Chương 1), chưa phải là “programing to interface” . Và nó là một trong trong câu hỏi hay; bạn đã học được rằng việc gắn code của bạn vào một lớp cấp thấp rất có chức năng dễ vỡ và kém linh hoạt hơn.
*
*
Ở đây, chúng tôi đã có không ít một trong những trong số những lớp chi tiết cụ thể cụ thể chi tiết được khởi tạo và nêu ra đưa ra quyết định khởi tạo nên bỏ ra trong những năm chạy (runtime) tùy vào một trong những trong số những trường hợp. Khi tất cả chúng ta cảm nhận code thế này, bạn biết rằng lúc đến lúc phải căn sửa hoặc mở rộng, bạn cần phải mở lại code này và kiểm tra những gì cần thêm (hoặc xóa). Đôi khi loại code thế này kết thúc trong một trong những trong số những phần của ứng dụng khiến việc bảo dưỡng và update cũng biến thành khó khăn vất vả hơn và dễ bị lỗi hơn. Nhưng bạn phải khởi tạo lập một đối tượng người dùng người sử dụng người sử dụng và Java chỉ đồng tình cho toàn bộ tất cả chúng ta một phương pháp thức thức duy nhất để rất có thể tạo một đối tượng người dùng người sử dụng người sử dụng (new), phải không? Vì vậy, ta sẽ làm gì? Có điều gì sai khi cần sử dụng “new”? Về mặt kỹ thuật, không sống sót gì sai với new cả, nó là một trong trong phần cơ bản của Java. Thủ phạm thực sự là người bạn cũ của toàn bộ tất cả chúng ta – SỰ THAY ĐỔI, SỰ THAY ĐỔI ảnh hưởng tác động tới sự việc cần sử dụng new của toàn bộ tất cả chúng ta. Bằng phương pháp thức thức “code với một interface” (programing to interface), bạn biết rằng bạn cũng luôn có thể tự bảo đảm an toàn mình khỏi không hề ít căn sửa rất có chức năng xảy ra với một mạng lưới mạng lưới hệ thống. Tại sao? Nếu code của bạn được phụ thuộc vào một interface, thì nó sẽ bị ảnh hưởng tác động hoạt động với bất cứ lớp mới nào implement interface đó trải qua đa hình. Thế nhưng, khi tất cả chúng ta có code phụ thuộc vào lớp con, bạn sẽ gặp trắc trở vì code đó rất có chức năng phải căn sửa lúc các lớp con mới được thêm vào. Vì vậy, nói phương pháp thức thức khác, lớp của không ít các bạn sẽ không trở nên “đóng cho việc cân chỉnh” (vi vi phạm luật nguyên tắc đã đề cập ở Chương 3: Decorator Pattern – Đối tượng người sử dụng quý khách hàng người sử dụng trang trí). Để rất có chức năng mở rộng nó với nhiều chủng loại lớp con mới, những các bạn sẽ cần được “mở” lại nó. Vậy bạn cũng luôn có thể làm gì? Này là lúc bạn cũng luôn có thể nương tựa vào Nguyên tắc kiến thiết OO để tìm kiếm manh mối. Hãy hãy nhớ là, nguyên tắc thứ nhất của toàn bộ tất cả chúng ta (Strategy) ảnh hưởng tác động đến việc căn sửa và hướng dẫn toàn bộ tất cả chúng ta chứng minh và khẳng định những tầm nhìn khác biệt và tách chúng khỏi những gì vẫn không biên tập.

Cần sử dụng thể chất bộ não

Tạo ra sự sao bạn cũng luôn có thể lấy tổng thể những đoạn code “khởi tạo lớp con” trong ứng dụng của bạn và tách hoặc đóng gói chúng khỏi những phần còn lại?

Chứng minh và khẳng định những tầm nhìn khác biệt

Hãy nói rằng bạn có một cửa hàng pizza và là chủ cửa hàng pizza tiên tiến và phát triển và trở nên tân tiến ở Objectville, bạn cũng luôn có thể sẽ viết một trong những trong số những dòng code như vậy này:
*

Nhưng bạn cần phải nhiều loại pizza hơn…

Vì vậy, thông suốt bạn thêm một trong những trong số những dòng code định nghĩa loại pizza phải chăng và thông suốt khởi tạo bánh pizza:
*

Nhưng phải thêm nhiều loại pizza nữa

Bạn nhận ra rằng tổng thể những đối phương tuyên chiến đối đầu và tuyên chiến đối đầu và cạnh tranh và tuyên chiến đối đầu và tuyên chiến đối đầu và cạnh tranh của bạn đã thêm một trong những loại pizza “hợp thời trang” vào thực đơn của chính mình: Pizza ClamVeggie Pizza. Rõ nét bạn cần phải đuổi kịp đối phương, chính vì vậy những các bạn sẽ thêm những mục này vào thực đơn của mình. Và mới thời gian gần đây bạn không bán tốt tương đối nhiều bánh Greek Pizzas, chính vì vậy bạn nêu ra đưa ra quyết định loại bỏ nó thoát thoát khỏi thực đơn: Rõ nét, việc giải quyết và xử lý và giải quyết khởi tạo trên thực sự gây rối cho phương pháp thức orderPizza() của toàn bộ tất cả chúng ta và ngăn không cho nó “đóng cho việc cân chỉnh”. Nhưng hiện giờ toàn bộ tất cả chúng ta đã biết đồ gì đang căn sửa và đồ gì không, chắc chắn là đã đến lúc đóng gói nó.

Đóng gói việc khởi tạo đối tượng người dùng người sử dụng người sử dụng

Vì vậy, hiện giờ toàn bộ tất cả chúng ta biết rằng sẽ cực tốt hơn khi chuyển việc tạo đối tượng người dùng người sử dụng người sử dụng thoát thoát khỏi phương pháp thức orderPizza(). Nhưng bằng phương pháp thức thức nào? Chà, những gì chúng tôi sẽ làm là lấy phần code tạo pizza và chuyển nó ra một đối tượng người dùng người sử dụng người sử dụng khác chỉ ảnh hưởng tác động tới sự việc tạo nên pizza. Chúng tôi đã đặt tên cho đối tượng người dùng người sử dụng người sử dụng mới mẻ và lạ mắt này: chúng tôi gọi nó là Factory. Những nhà máy sản xuất chế tạo Factory giải quyết và xử lý và giải quyết phần chi tiết cụ thể cụ thể chi tiết của việc việc tạo đối tượng người dùng người sử dụng người sử dụng. Khi toàn bộ tất cả chúng ta có một SimplePizzaFactory, phương pháp thức orderPizza() của toàn bộ tất cả chúng ta sẽ trở thành một máy khách (client) của đối tượng người dùng người sử dụng người sử dụng đó. Bất cứ khi nào nó cần một chiếc bánh pizza, nó sẽ bị ảnh hưởng tác động ý kiến đề xuất ý kiến đề xuất nhà máy sản xuất chế tạo sản xuất pizza làm một cái. Đã qua rồi cái thời mà phương pháp thức orderPizza() cần được biết về loại pizza Greek Pizzas hay là Clam pizzas. Hiên giờ phương pháp thức orderPizza() chỉ chăm chú lưu ý rằng nó nhận được một chiếc bánh pizza đang implement giao diện Pizza để chúng rất có chức năng gọi prepare(), bake(), cut(), và box(). Chúng tôi vẫn vẫn đang còn một trong những chi tiết cụ thể cụ thể chi tiết để điền vào chỗ này; ví dụ nổi bật, phương pháp thức orderPizza() sửa chữa thay thế thay thế sửa chữa code tạo của chính bản thân mình nó bằng gì? Hãy implement một nhà máy sản xuất chế tạo đơn giản dễ dàng cho cửa hàng pizza và khám phá …

Kiến thiết xây dựng một Pizza Factory đơn giản dễ dàng

Chúng tôi sẽ bước đầu với chính nhà máy sản xuất chế tạo. Những gì chúng tôi sẽ làm là định nghĩa một lớp gói gọn việc tạo đối tượng người dùng người sử dụng người sử dụng cho tổng thể nhiều chủng loại pizza. Nó đây…
Xem Ngay:  Tự Tin Là Gì - Làm Thế Nào để Tự Tin

Không sống sót câu hỏi nào ngớ ngẩn

Hỏi: Quyền hạn của việc vấn đề đó đấy là gì? Hình như như toàn bộ tất cả chúng ta chỉ đang đẩy vấn đề qua 1 đối tượng người dùng người sử dụng người sử dụng khác. Trả lời: Một sự việc cần hãy nhớ là SimplePizzaFactory rất có chức năng có tương đối nhiều client. Toàn bộ tổng thể tất cả chúng ta chỉ cảm nhận phương pháp thức orderPizza() gọi đến nó; mặc dù thế, rất có chức năng có một lớp client khác – PizzaShopMenu cũng cần sử dụng factory để rất có thể tạo pizza và lấy biểu đạt và giácủa nó. Toàn bộ tổng thể tất cả chúng ta cũng luôn có thể có một lớp HomeDelivery gọi đến nhà máy sản xuất chế tạo tạo pizza theo phương pháp thức thức khác với lớp PizzaShop, nhưng tổng thể chúng đều là client của Factory. Vì vậy, bằng phương pháp thức thức đặt việc khởi tạo pizza trong tương đối nhiều lớp, bây giờ toàn bộ tất cả chúng ta chỉ có một lớp để tiến hành triển khai thi công cân chỉnh khi thiết yếu. Hãy nhớ là, toàn bộ tất cả chúng ta cũng sắp xóa việc khởi tạo lớp con khỏi phương pháp thức orderPizza() ! Hỏi: Tôi đã thấy một kiến thiết cũng như, trong số đó một factory sẽ tiến hành triển khai định nghĩa là một trong trong phương pháp thức static. Có sự độc đáo gì không? Trả lời: Định nghĩa factory là một trong trong phương pháp thức static là một trong trong kỹ thuật phổ biến và thường được gọi là một trong trong “static factory”. Tại sao cần sử dụng phương pháp thức tĩnh ư? Chính bởi bạn không cần khởi tạo một đối tượng người dùng người sử dụng người sử dụng để cần sử dụng phương pháp thức factory. Nhưng hãy hãy nhớ là nó cũng luôn có sự ăn hại là bạn không hề có lớp con và căn sửa biện pháp hành động của phương pháp thức get, set.

Sửa lại lớp PizzaStore với Simple Factory

Hiên giờ là thời điểm để sửa code. Những gì chúng tôi muốn làm là nương tựa vào factory để rất có thể tạo nên nhiều chủng loại pizza. Phía bên dưới đó chính là những căn sửa: Hiên giờ lớp PizzaStore (client) sẽ tham chiếu đến SimplePizzaFactory (factory) của toàn bộ tất cả chúng ta.

Cần sử dụng thể chất bộ não

Toàn bộ tổng thể tất cả chúng ta biết rằng việc kết hợp những object (composition) thay thế sửa chữa vì implementation được chấp nhận toàn bộ tất cả chúng ta căn sửa biện pháp hành động một phương pháp thức thức linh hoạt trong runtime Chính bởi chúng khá có chức năng căn sửa giữa nội ngoại thất việc thừa hưởng. Tạo ra sự sao chúng ta cũng có thể cần sử dụng điều này trong PizzaStore? Những kiến tạo factory nào chúng ta cũng có thể đàm luận giữa nội ngoại thất?

Định nghĩa Simple Factory

Simple Factory không thực sự là một trong trong mẫu kiến thiết; nó là một trong trong programming idiom (thành ngữ lập trình). Nhưng nó thường được sử dụng, chính vì vậy chúng tôi sẽ Tặng ngay cho nó một Brand Name “Head First Pattern Honorable Mention”. Một số trong những nhà phát triển đã nhầm với “Factory Pattern” (những gì toàn bộ tất cả chúng ta khám phá nãy giờ chưa phải là Factory Pattern), chính vì vậy lần sau, khi giữa bạn và một developer khác không biết nói gì, bạn đã có không ít một chủ đề hay để đàm luận. Simple Factory chưa phải là một trong trong mẫu THỰC SỰ, không sống sót nghĩa là toàn bộ tất cả chúng ta không nên xem xét phương pháp thức thức mà nó kết hợp cùng nhau. Hãy cùng chiêm ngưỡng và thưởng thức sơ đồ lớp của Phòng trưng bày Pizza mới của chúng tôi: Hãy nghĩ về Simple Factory như một sự khởi động. Phía sau, toàn bộ tất cả chúng ta trở nên khai phá và tìm hiểu Abstract Factory Pattern. Nhưng đừng lo, vẫn còn đấy đó không hề ít điều để nói ở đây! * Chỉ là một trong trong lời nhắc khác: giữa những mẫu kiến thiết, cụm từ “implement an interface”, chưa phải lúc nào cũng luôn có nghĩa là “tạo một lớp implement một Java interface, bằng phương pháp thức thức cần sử dụng từ khóa “implements” trong khai báo lớp con”. Một lớp chi tiết cụ thể cụ thể chi tiết implements một phương pháp thức khởi hành điểm xuất phát điểm từ 1 supertype (rất có chức năng là một trong trong lớp HOẶC interface) vẫn được coi là một trong trong “implement an interface” của supertype đó.

Nhượng quyền cửa hàng pizza

(Nhượng quyền thương hiệu hiểu nôm na là được chấp nhận dùng thương hiệu của bạn để mở một Đại bản doanh khác, và chia lại lệch giá cho bạn. Royal tea – Trà sữa ở tổng thể những khu vực chưa phải cùng 1 người chủ sở hữu chiếm hữu, đó đã được nhượng quyền lại cho tất cả những người khác) Objectville PizzaStore của bạn đã làm rất tốt rất có thể đến nỗi bạn đã đánh bại đối phương và hiện giờ mọi người đều muốn có một PizzaStore ở khu vực họ sống. Là người nhượng quyền (franchiser), bạn rất thích đảm bảo an toàn an toàn và đáng tin cậy chất lượng của hoạt động nhượng quyền và chính vì vậy bạn rất thích họ cần sử dụng lại code (mà bạn bạn đã bỏ thời điểm ra test) để những cửa hàng được nhượng quyền cần sử dụng. Nhưng có sự độc đáo về bao quanh nơi đặt? Mỗi khu vực được nhượng quyền rất có chức năng muốn đồng tình nhiều chủng loại pizza khác biệt (TP Thành Phố New York, Chicago và California,…), tùy vào điểm đặt cửa hàng được nhượng quyền và nhu yếu của không ít người sành pizza ở địa phương.

Chúng tôi đã thấy một phương pháp thức thức tiếp cận …

Nếu chúng tôi loại bỏ lớp SimplePizzaFactory và tạo nên ba lớp factory khác: NYPizzaFactory, ChicagoPizzaFactory CaliforniaPizzaFactory, thì chúng tôi rất có chức năng kết hợp PizzaStore với một factory phải chăng và nhượng quyền tài chính là sự việc cực tốt. Đó là một trong trong phương pháp thức thức tiếp cận. Hãy xem điều này sẽ trông như …

Nhưng bạn rất thích điều hành và kiểm soát quản lý và điều hành chất lượng hơn một chút …

Vì vậy, bạn đã thử nghiệm SimpleFactory cho những cửa hàng được nhượng quyền và những gì bạn cảm nhận là những cửa hàng đó đang cần sử dụng SimpleFactory để rất có thể tạo nên pizza, nhưng ở địa phương của chính mình, phương pháp thức thức tạo bánh pizza sẽ có được một trong những độc đáo: họ nướng mọi thứ hơi khác đôi chút, họ phải cắt bánh pizza ra trước khi giao và họ sẽ cần sử dụng hộp của bên thứ ba… Để ý đến lại vấn đề một chút, bạn cảm nhận rằng những gì bạn thực sự muốn làm là tạo nên một khuôn khổ liên kết cửa hàng và việc tạo nên pizza cùng nhau, nhưng vẫn đồng ý cho phép mọi thứ vẫn linh hoạt. (Với SimpleFactory thì cụ thể chi tiết bạn đang buộc những cửa hàng nhượng quyền phải theo một khuôn khổ duy nhất) Trong code trước đây của chúng tôi, trước SimplePizzaFactory, chúng tôi đã có không ít code làm bánh pizza gắn liền với PizzaStore, nhưng nó không linh hoạt. Vì vậy, tạo ra sự sao chúng ta cũng có thể có bánh pizza của chúng tôi?

Một Framework cho cửa hàng pizza

Có một phương pháp thức thức để “bản địa hóa” tổng thể các hoạt động sinh hoạt hoạt động làm bánh pizza cho lớp PizzaStore, nhưng vẫn đồng ý cho phép nhượng quyền chủ quyền theo style của từng bao quanh nơi đặt riêng. Những gì chúng tôi sẽ làm là đưa phương pháp thức createPizza() trở về vào PizzaStore, nhưng lần này là một trong trong phương pháp thức trừu tượng (abstract), thông suốt tạo một lớp con PizzaStore cho mỗi kiểu vùng. Đầu tiên, hãy xem những căn sửa của PizzaStore: Hiên giờ chúng tôi đã có không ít một cửa hàng đang chờ những lớp con thừa hưởng; chúng tôi sẽ có được những lớp con cho từng loại bao quanh nơi đặt (NYPizzaStore, ChicagoPizzaStore, CaliforniaPizzaStore) và mỗi lớp con sẽ bỏ ra nêu ra đưa ra quyết định về những gì khiến cho một chiếc bánh pizza. Hãy xem điều này sẽ hoạt động ra sao.

Đc được chấp nhận lớp con nêu ra đưa ra quyết định

Hãy hãy nhớ là, PizzaStore đã có không ít một mạng lưới mạng lưới hệ thống đặt đơn hàng được test kỹ lưỡng trong phương pháp thức orderPizza() và bạn rất thích đảm bảo an toàn rằng nó phải chăng với tổng thể những khu vực được nhượng quyền. Điều độc đáo trong số những PizzaStores ở từng địa phương là quý phái thức pizza họ làm – Pizza TP Thành Phố New York có lớp vỏ mỏng manh tanh, Chicago Pizza dày, v.v. – và chúng tôi sẽ đưa tổng thể những biến thể này vào phương pháp thức createPizza() và nó sẽ bị ảnh hưởng tác động chịu nghĩa vụ và trách nhiệm tạo nên đúng loại pizza. Toàn bộ tổng thể tất cả chúng ta làm vấn đề đó đấy là bằng phương pháp thức thức được chấp nhận mỗi lớp con của PizzaStore định nghĩa lại phương pháp thức createPizza(). Vì vậy, toàn bộ tất cả chúng ta sẽ có được một trong những trong số những lớp con chi tiết cụ thể cụ thể chi tiết của PizzaStore, mỗi lớp có những biến thể pizza riêng, tổng thể đều nơi trưng bày trong khung PizzaStore và vẫn cần sử dụng phương pháp thức orderPizza(). Xem Ngay: Tải game show Yugioh Power Of Chaos: Yugi The Destiny, Download Yugioh Power Of Chaos Yugi The Destiny Chà, hãy nghĩ về nó theo phương pháp nhìn của phương pháp thức orderPizza() của lớp PizzaStore: nó được định nghĩa trong lớp trừu tượng PizzaStore, nhưng nhiều chủng loại chi tiết cụ thể cụ thể chi tiết chỉ được tạo giữa những lớp con. Hiên giờ, để hiểu thêm một chút, phương pháp thức orderPizza() tiến hành triển khai thi công không hề ít thứ với một đối tượng người dùng người sử dụng người sử dụng Pizza (như sẵn sàng chuẩn bị sẵn sàng chuẩn bị, nướng, cắt, đóng hộp), nhưng Chính bởi Pizza là abstract, orderPizza() không biết lớp con thực sự là gì, có ảnh hưởng tác động ra sao. Nói phương pháp thức thức khác, nó đã tách ra! Khi orderPizza() gọi createdPizza(), một trong các các những lớp con của các bạn sẽ tiến hành triển khai gọi hành động để rất có thể tạo nên một chiếc bánh pizza. Nhiều chủng loại pizza nào sẽ được thiết kế? Chà, điều này nêu ra đưa ra quyết định bởi sự lựa chọn cửa hàng pizza mà bạn đặt hàng từ NYStylePizzaStore hoặc ChicagoStylePizzaStore. Vì vậy, có một nêu ra đưa ra quyết định mà những lớp con bỏ ra trong những năm thực (runtime) đúng không nhỉ nào? Không, nhưng theo phương pháp nhìn của orderPizza(), nếu người sử dụng chọn NYStylePizzaStore, lớp con đó sẽ chứng minh và khẳng định loại pizza nào được thiết kế. Vì vậy, những lớp con chưa phải là người nêu ra đưa ra quyết định thực sự – mà này là bạn, bạn nêu ra đưa ra quyết định bằng phương pháp thức thức chọn cửa hàng nào bạn rất thích – nhưng lớp con lại chứng minh và khẳng định loại pizza nào được thiết kế.
Xem Ngay:  Diplomat Là Gì - Diplomat Trong Tiếng Tiếng Việt

Hãy tạo một PizzaStore

Là một khu vực được nhượng quyền sẽ có được quyền hạn của chính bản thân mình nó. Bạn nhận được tổng thể những tính năng của lớp PizzaStore free. Tất cả những cửa hàng địa phương cần làm là phân lớp PizzaStore và đồng tình phương pháp thức createPizza() tạo nhiều chủng loại Pizza của chính mình. Toàn bộ tổng thể tất cả chúng ta sẽ chăm chú lưu ý ba quý phái thức pizza to cho tất cả những người được nhượng quyền. Ở đây, quý phái thức bao quanh nơi đặt TP Thành Phố New York: Chú ý rằng phương pháp thức orderPizza() trong lớp cha không biết loại Pizza nào toàn bộ tất cả chúng ta đang tạo; Nó chỉ biết chúng rất có chức năng sẵn sàng chuẩn bị sẵn sàng chuẩn bị, nướng, cắt, và đóng hộp! Một khi toàn bộ tất cả chúng ta đã thiết kế xây dựng những lớp con PizzaStore, đã đến khi chứng kiến tận mắt về sự việc vấn đề đặt mua một hoặc hai chiếc bánh pizza. Nhưng trước khi toàn bộ tất cả chúng ta làm điều này, tại sao bạn không tự thiết kế xây dựng những cửa hàng pizza Chicago StyleCalifornia Style? Lấy giấy ra và làm đi nào.

Mô tả một phương pháp thức factory

Chỉ với một trong những biên tập cho PizzaStore, chúng tôi đã chuyển từ các việc chỉ có một đối tượng người dùng người sử dụng người sử dụng giải quyết và xử lý và giải quyết việc khởi tạo những lớp chi tiết cụ thể cụ thể chi tiết của chúng tôi thành một tập hợp những lớp con lúc này đang tiếp nhận nghĩa vụ và trách nhiệm đó. Hãy để xem xét kỹ hơn:

Vậy tạo ra sự sao để họ đặt đơn hàng?

Đầu tiên, Joel và Ethan cần một thể hiện (instance) của PizzaStore. Joel thì nên cần khởi tạo một ChicagoPizzaStore và Ethan cần một NYPizzaStore.Với một PizzaStore trong tim bàn tay, cả Ethan và Joel đều gọi phương pháp thức orderPizza() và điền type pizza mà họ có nhu cầu (phô mai, rau, v.v.).Để rất có thể tạo nên nhiều chủng loại pizza, phương pháp thức createPizza() được gọi, được định nghĩa trong hai lớp con NYPizzaStore ChicagoPizzaStore. Như chúng tôi đã định nghĩa chúng, NYPizzaStore tạo nên một chiếc bánh pizza theo quý phái thức NY và ChicagoPizzaStore tạo nên chiếc bánh pizza kiểu Chicago. Trong cả hai trường hợp, Pizza được trả về phương pháp thức orderPizza().Phương thức orderPizza() không biết loại pizza nào được tạo nên, nhưng nó biết nó là một trong trong loại pizza và nó sẵn sàng chuẩn bị sẵn sàng chuẩn bị, làm bánh, cắt, và đóng hộp cho Ethan và Joel.

Hãy cùng kiểm tra xem những chiếc pizza này thực sự được sản xuất ra sao khi order…

Toàn bộ tổng thể tất cả chúng ta vừa quên một thứ: TẠO PIZZA!

PizzaStore của toàn bộ tất cả chúng ta sẽ không thể phổ biến nếu như không có một trong những trong số những loại pizza, chính vì vậy hãy làm chúng:

Hiên giờ toàn bộ tất cả chúng ta chỉ cần một trong những trong số những lớp con chi tiết cụ thể cụ thể chi tiết … tạo ra sự sao để chứng minh và khẳng định cheese pizzas kiểu TP Thành Phố New York hay Chicago?

Sau cuối cũng đến lúc biết về Factory Pattern

Tất cả những mẫu factory đóng gói việc tạo đối tượng người dùng người sử dụng người sử dụng. Mẫu Factory Pattern đóng gói việc tạo đối tượng người dùng người sử dụng người sử dụng bằng phương pháp thức thức để những lớp con nêu ra đưa ra quyết định những đối tượng người dùng người sử dụng người sử dụng sẽ tạo nên. Hãy cùng kiểm tra những sơ đồ lớp này để xem ai là “người chơi chính” trong mẫu này:

Lớp Creator

Một ánh nhìn khác của Factory Pattern: mạng lưới mạng lưới hệ thống phân cấp lớp dạng mặc dù vậy mặc dù vậy

Chúng tôi đã thấy rằng factory pattern đồng tình một framework bằng phương pháp thức thức đồng tình một phương pháp thức orderPizza() được kết hợp với một factory method. Một phương pháp thức thức khác để xem mẫu này như một framework là trong phương pháp thức thức nó gói gọn “thông tin về mặt hàng” vào mỗi creator. Hãy cùng xem xét hai mạng lưới mạng lưới hệ thống phân cấp lớp đặt mặc dù vậy mặc dù vậy và xem chúng ảnh hưởng tác động ra sao:

Xây cất

Toàn bộ tổng thể tất cả chúng ta cần một loại bánh pizza khác cho tất cả những người California. Vẽ một tập hợp những lớp mặc dù vậy mặc dù vậy khác mà bạn phải kê thêm một vùng California mới vào chuỗi cửa hàng PizzaStore của chúng tôi. Được rồi, hiện giờ viết năm thứ kỳ lạ nhất mà bạn cũng luôn có thể nghĩ ra để ném lên trên một chiếc bánh pizza. Kế tiếp, những các bạn sẽ sẵn sàng chuẩn bị sẵn sàng chuẩn bị kinh doanh thương mại kinh tế làm pizza ở California!

Định nghĩa Factory Pattern

Này là thời điểm để bỏ ra định nghĩa chính thức của Factory Pattern (hay Factory Method Pattern): (Factory Pattern chứng minh và khẳng định một interface để rất có thể tạo một đối tượng người dùng người sử dụng người sử dụng, nhưng được chấp nhận những lớp con nêu ra đưa ra quyết định lớp nào sẽ tạo nên nên. Factory Pattern giao việc khởi tạo một đối tượng người dùng người sử dụng người sử dụng chi tiết cụ thể cụ thể chi tiết cho lớp con) Như với toàn bộ nhà máy sản xuất chế tạo, Mẫu Factory Pattern cho toàn bộ tất cả chúng ta một phương pháp thức thức để gói gọn những khởi tạo của không ít loại chi tiết cụ thể cụ thể chi tiết. Nhìn vào sơ đồ lớp phía bên dưới, bạn cũng luôn có thể cảm nhận rằng abstract Creator đồng tình cho bạn một interface với phương pháp thức khởi tạo những đối tượng người dùng người sử dụng người sử dụng, còn được gọi là “factory method”. Bất kỳ lớp nào khác implement lớp abstract Creator đều được viết để điều hành quản lý trên những mặt hàng (object) được tạo bởi factory method. Chỉ những lớp con thực sự tiến hành triển khai thi công phương pháp thức factory và tạo nên mặt hàng (object). Như trong định nghĩa chính thức, những các bạn sẽ nghe những developer nói rằng Factory Pattern được chấp nhận những lớp con nêu ra đưa ra quyết định lớp nào sẽ tạo nên nên. Họ nói rằng “nêu ra đưa ra quyết định” chưa phải vì loại hình được chấp nhận chính những lớp con nêu ra đưa ra quyết định trong runtime, mà Chính bởi lớp creator được viết mà trọn vẹn không cần thiết phải biết về những mặt hàng trong trong thực tế sẽ tiến hành triển khai tạo, được nêu ra đưa ra quyết định tuyệt vời nhất bởi sự lựa chọn của lớp con.

Không sống sót câu hỏi ngớ ngẩn

Hỏi: Hữu dụng ích gì không nếu Factory Pattern chỉ có một ConcreteCreator? Trả lời: Factory Pattern rất có lợi nếu người sử dụng chỉ có một concrete creator vì bạn đang tách riêng việc kiến tạo mặt hàng khỏi việc cần sử dụng nó. Nếu người sử dụng thêm mặt hàng bổ sung cập nhật update cập nhật hoặc căn sửa một Loại sản phẩm kiến tạo, nó sẽ bị ảnh hưởng tác động không ảnh hưởng tác động đến Creator của bạn (vì Creator không được kết nối chặt chẽ với bất cứ ConcreteProduct nào). Hỏi: Có đúng không nhỉ nào khi nói rằng những cửa hàng NY và Chicago của chúng tôi được kiến tạo bằng Simple Factory? Chúng trông hệt như nó. Trả lời: Chúng giống nhau, nhưng được cần sử dụng theo những phương pháp thức khác biệt. Mặc dù rằng việc kiến tạo của mỗi concrete store trông rất giống SimplePizzaFactory, hãy hãy nhớ là những concrete store đang extends một lớp đã định nghĩa createPizza() là một trong trong phương pháp thức trừu tượng. Tùy từng mỗi cửa hàng để chứng minh và khẳng định biện pháp hành động của phương pháp thức createPizza(). Trong Simple Factory, factory là một trong trong đối tượng người dùng người sử dụng người sử dụng khác được kết hợp với PizzaStore. Hỏi: Có phải factory method và Creator luôn trừu tượng? Trả lời: Không, bạn cũng luôn có thể chứng minh và khẳng định factory method mặc định để sản xuất một trong những trong số những mặt hàng chi tiết cụ thể cụ thể chi tiết. Khi ấy, bạn luôn có phương tiện đi lại di chuyển và đi lại tạo mặt hàng ngay đến những khi không sống sót lớp con của Creator. Hỏi: Mỗi cửa hàng rất có chức năng tạo nên bốn loại pizza khác biệt phụ thuộc vào type được truyền vào. Có phải tổng thể những creator con đều tạo được không ít mặt hàng, hay đôi chút chúng chỉ làm một loại? Trả lời: Chúng tôi đã implemented những gì được biết thành tham số cho factory method. Chúng rất có chức năng tạo nhiều chưa dừng lại ở đó một đối tượng người dùng người sử dụng người sử dụng phụ thuộc vào tham số được truyền vào, như bạn cảm nhận. Thế nhưng, thỉnh thoảng, một nhà máy sản xuất chế tạo chỉ tạo một đối tượng người dùng người sử dụng người sử dụng và không sống sót tham số truyền vào. Cả hai đều là phương pháp thức thức viết hợp lệ của mẫu. Hỏi: Nhiều chủng loại tham số của bạn dường như không an toàn và đáng tin cậy và an toàn và đáng tin cậy và an toàn và đáng tin cậy. Tôi chỉ truyền một chuỗi String! Điều gì sẽ xảy ra nếu tôi ý kiến đề xuất ý kiến đề xuất một món “CalmPizza” (ý nói truyền tùy ý một chuỗi String nào cũng khá được)? Trả lời: Bạn vật chứng và chứng minh và khẳng định là đúng và điều này là nguyên nhân xảy ra lỗi thời điểm chạy (runtime error). Có một trong những kỹ thuật rất có chức năng sử dụng để rất có thể tạo một tham số an toàn và đáng tin cậy và an toàn và đáng tin cậy và an toàn và đáng tin cậy hơn hoặc một phương pháp thức thức nói khác, đảm bảo an toàn an toàn và đáng tin cậy lỗi giữa những parameter rất có chức năng được catch (bắt) tại thời điểm biên dịch. Ví dụ nổi bật, bạn cũng luôn có thể tạo những đối tượng người dùng người sử dụng người sử dụng đại diện thay mặt đại diện cho nhiều chủng loại tham số, cần sử dụng những hằng số hoặc trong Java 5, bạn cũng luôn có thể cần sử dụng Enums. Hỏi: Tôi vẫn còn đấy đó một chút bối rối về sự việc việc độc đáo giữa Simple FactoryFactory Pattern. Chúng trông rất giống nhau, ngoại trừ trong Factory Pattern, lớp returnspizza là một trong trong lớp con. Bạn cũng luôn có thể nghiên cứu và phân tích và giải thích không? Trả lời: Bạn đúng về điều này, những lớp con trông rất giống Simple Factory, mặc dù thế, suy nghĩ của Simple Factory như một “shot Giảm ngay”, trong số những lúc với Factory Pattern, bạn đang tạo một framework làm đc đồng ý những lớp con nêu ra đưa ra quyết định việc kiến tạo nào sẽ tiến hành triển khai cần sử dụng. Ví dụ, phương pháp thức orderPizza() trong Factory Pattern đồng tình một framework chung để rất có thể tạo nên nhiều chủng loại pizza (phụ thuộc vào phương pháp thức factory) lúc ấy những lớp con sẽ trực tiếp tạo nên những chiếc pizza. Bằng phương pháp thức thức phân lớp PizzaStore, bạn nêu ra đưa ra quyết định mặt hàng chi tiết cụ thể cụ thể chi tiết nào orderPizza() sẽ return. So sánh với SimpleFactory, đồng tình cho bạn một phương pháp thức thức để đóng gói việc tạo đối tượng người dùng người sử dụng người sử dụng, nhưng không được phép bạn linh hoạt như Factory Pattern vì không sống sót phương pháp thức thức nào để sửa chữa thay thế thay thế sửa chữa đổi những mặt hàng bạn tạo nên.
Xem Ngay:  Rat Là Gì - Nghĩa Của Từ Rat

Sư phụ và Học trò…

Sư phụ: Grasshopper, cho thầy biết con đã học được những gì? Học trò: Sư phụ, con đã tiến hành triển khai thi công điều tra và nghiên cứu của mình về “đóng gói những gì căn sửa” về phạm vi khoanh vùng. Sư phụ: Thường xuyên đi… Học trò: Con đã học được rằng người ta rất có chức năng đóng gói code tạo nên những đối tượng người dùng người sử dụng người sử dụng. Khi có code khởi tạo những lớp chi tiết cụ thể cụ thể chi tiết, đây là một trong trong bao quanh nơi đặt liên tục căn sửa. Con đã học được một kỹ thuật gọi là “factory pattern”, được chấp nhận con gói gọn biện pháp hành động khởi tạo này. Sư phụ: Và những “factory” đó, chúng hữu dụng ích gì? Học trò: Có khá nhiều. Bằng phương pháp thức thức đặt tổng thể code tạo đối tượng người dùng người sử dụng người sử dụng của mình vào một object hoặc phương pháp thức, con tránh trùng lặp trong code của mình và đồng tình một khu vực để tiến hành triển khai thi công việc bảo dưỡng. Điều đó cũng luôn có nghĩa là những client chỉ phụ thuộc vào những interface thay thế sửa chữa vì những lớp chi tiết cụ thể cụ thể chi tiết thiết yếu để khởi tạo những đối tượng người dùng người sử dụng người sử dụng. Như con đã học được giữa những điều tra và nghiên cứu của mình, điều này được chấp nhận con lập trình trên một giao diện (program to an interface), chưa phải là lập trình trên implementation và điều này tạo nên code của con linh hoạt hơn và rất có chức năng mở rộng về sau. Sư phụ: Vâng Grasshopper, bản năng OO của con đang phát triển. Con có bất cứ câu hỏi cho sư phụ ngày bây giờ không? Học trò: Sư phụ, con biết rằng bằng phương pháp thức thức đóng gói việc tạo đối tượng người dùng người sử dụng người sử dụng, con đang “coding to abstractions” (code đến việc trừu tượng) và tách code client của con khỏi những kiến tạo trong trong thực tế. Nhưng factory code vẫn cần phải cần sử dụng những lớp concrete (lớp con thừa hưởng factory) để khởi tạo những đối tượng người dùng người sử dụng người sử dụng thực. Đây có phải là một trong trong cú lừa? Sư phụ: Grasshopper, Khởi tạo đối tượng người dùng người sử dụng người sử dụng là một trong trong trong trong thực tế của cuộc sống thường ngày thường ngày; toàn bộ tất cả chúng ta phải khởi tạo lập những đối tượng người dùng người sử dụng người sử dụng hoặc toàn bộ tất cả chúng ta sẽ không thể lúc nào tạo một chương trình Java. Nhưng, với kiến ​​thức về trong trong thực tế này, chúng ta cũng có thể kiến thiết code của mình, chính vì vậy toàn bộ tất cả chúng ta đã cân chỉnh creation code này hệt như con cừu mà len của chính bản thân mình nó sẽ bị ảnh hưởng tác động kéo qua mắt con (nguyên văn: whose wool you would pull over your eyes – thành ngữ chỉ sự lừa ai đó). Sau khi được cân chỉnh, chúng ta cũng có thể bảo đảm an toàn và bảo dưỡng code khởi tạo (creation code). Nếu toàn bộ tất cả chúng ta để creation code của mình chạy chủ quyền, thì toàn bộ tất cả chúng ta sẽ không thể lúc nào tích góp được “len” của chính bản thân mình nó. Học trò: Sư phụ, con cảm nhận sự thật trong này. Sư phụ: Như thầy đã biết con sẽ làm. Hiên giờ, đi và suy nghĩ về những phụ thuộc đối tượng người dùng người sử dụng người sử dụng (object dependencies). Xem Ngay: Máy Biến áp Là Gì – Cấu Tạo Và Nguyên Lý Hoạt động và sinh hoạt và hoạt động

Phòng trưng bày Pizza “rất phụ thuộc”

Hãy giả vờ như bạn đã từng nghe nhắc đến Factory Pattern. Ở đây, một phiên bản của PizzaStore không cần sử dụng factory pattern; hãy đếm số đối tượng người dùng người sử dụng người sử dụng con tạo pizza lớp này phụ thuộc. Nếu người sử dụng đã thêm pizza kiểu California vào PizzaStore này, thì có bao nhiêu đối tượng người dùng người sử dụng người sử dụng sẽ phụ thuộc vào đó?
*

Nhìn vào sự phụ thuộc đối tượng người dùng người sử dụng người sử dụng

Khi tất cả chúng ta trực tiếp khởi tạo một đối tượng người dùng người sử dụng người sử dụng, bạn phụ thuộc vào lớp chi tiết cụ thể cụ thể chi tiết của chính bản thân mình nó. Hãy xem lại PizzaStore không hề ít sự phụ thuộc của chúng tôi. Nó tạo nên tổng thể những đối tượng người dùng người sử dụng người sử dụng pizza ngay trong lớp PizzaStore thay thế sửa chữa vì ủy thác cho một lớp Factory. Nếu toàn bộ tất cả chúng ta vẽ một sơ đồ biểu lộ phiên bản đó của PizzaStore và tổng thể những đối tượng người dùng người sử dụng người sử dụng mà nó phụ thuộc vào, thì ở đây, nó trông ra sao: Thể Loại: Chia sẻ trình bày Kiến Thức Cộng Đồng
Bài Viết: Abstract Factory Pattern Là Gì, Abstract Factory Pattern Thể Loại: LÀ GÌ Nguồn Blog là gì: https://hethongbokhoe.com Abstract Factory Pattern Là Gì, Abstract Factory Pattern

Leave a Reply

Your email address will not be published.