Một số mẫu thiết kế lập trình hữu ích trong phát triển trò chơi là gì? [đóng cửa]


129

Tôi có một vài cuốn sách về Mẫu thiết kế, và đã đọc một số bài viết, nhưng không thể tìm ra bằng trực giác những mẫu thiết kế lập trình nào sẽ hữu ích trong phát triển trò chơi.

Ví dụ: tôi có một cuốn sách có tên ActionScript 3 với các mẫu thiết kế mô tả chi tiết một số mẫu thiết kế như Model View Controller, Singleton, Factory, Command, v.v.

Là một người mới làm điều này, tôi không thể tìm ra cái nào trong số này sẽ hữu ích, hoặc trên thực tế nếu có bất kỳ mẫu nào trong số này là các mẫu thiết kế tôi nên học và cố gắng sử dụng. Có lẽ có những mẫu thiết kế dành riêng cho lập trình trò chơi khác mà tôi thậm chí không nhận ra?

Nếu bạn có kinh nghiệm sử dụng một mẫu thiết kế nhất định trong phát triển trò chơi, tôi rất muốn nghe nó. Lý do là tại sao nó được sử dụng, các mẫu mã hoặc tài nguyên trực tuyến đều rất hữu ích nếu bạn có chúng. Hiện tại tôi quan tâm nhất đến việc triển khai ActionScript 3 và C ++, nhưng chắc chắn có thể hưởng lợi từ kinh nghiệm và ví dụ từ bất kỳ ngôn ngữ nào.

Cảm ơn!


"Có lẽ có những mẫu thiết kế khác dành cho lập trình trò chơi khác mà tôi thậm chí không nhận ra?" - không, các mẫu này là chung chung và áp dụng nhiều hơn để mở rộng khả năng của ngôn ngữ bạn đang sử dụng. Họ không có gì để làm với các chủ đề của ứng dụng của bạn.
Kylotan

3
@Kylotan Dường như theo quan điểm hạn chế của tôi rằng vì mỗi mẫu thiết kế có nghĩa là giải quyết một vấn đề cụ thể theo cách hiệu quả, do bản chất của chúng, một số mẫu thiết kế sẽ hữu ích hơn các mẫu khác được đặt trong một trường hợp cụ thể, cụ thể là trong trường hợp này, những vấn đề đó đặt ra duy nhất cho sự phát triển trò chơi. Chắc chắn có một số hướng dẫn, hoặc dựa trên kinh nghiệm của bạn, các mẫu thiết kế cụ thể mà bạn thấy mình sử dụng thường xuyên hơn những người khác?
jcurrie33

Trước khi bất cứ ai đi ra ngoài và học 1000 mẫu thiết kế khác nhau, xin vui lòng đọc cái nàycái này
BlueRaja - Danny Pflughoeft

Liên kết @ BlueRaja-DannyPflughoeft Secon không hợp lệ. Bạn có thể gửi lại không
Emadpres 24/08/2015

Câu trả lời:


163

Bây giờ cho một phản ứng ít flippant, với một số gợi ý. Đừng coi đây là những khuyến nghị thực hiện, nhiều hơn là những ví dụ về việc sử dụng có thể.

  • Trình tạo: thiết lập một thực thể dựa trên thành phần một thành phần tại một thời điểm, dựa trên dữ liệu
  • Phương thức xuất xưởng: tạo NPC hoặc tiện ích GUI dựa trên chuỗi được đọc từ tệp
  • Nguyên mẫu: lưu trữ một nhân vật 'Elf' chung chung với các thuộc tính ban đầu và tạo các thể hiện Elf bằng cách nhân bản nó.
  • Singleton: không gian này cố tình để trống.
  • Bộ điều hợp: kết hợp một thư viện bên thứ 3 tùy chọn bằng cách gói nó trong một lớp trông giống như mã hiện tại của bạn. Rất hữu ích với DLL.
  • Kết hợp: tạo biểu đồ cảnh của các đối tượng có thể kết xuất hoặc tạo GUI từ cây Widgets
  • Mặt tiền: đơn giản hóa các thư viện bên thứ 3 phức tạp bằng cách cung cấp giao diện đơn giản hơn để giúp cuộc sống của bạn dễ dàng hơn sau này.
  • Fly weight: lưu trữ các khía cạnh được chia sẻ của một NPC (ví dụ: mô hình, kết cấu, hình động) tách biệt với các khía cạnh riêng lẻ (ví dụ: vị trí, sức khỏe) theo cách gần như minh bạch
  • Proxy: Tạo các lớp nhỏ trên máy khách đại diện cho các lớp lớn hơn, phức tạp hơn trên máy chủ và chuyển tiếp yêu cầu qua mạng.
  • Chuỗi trách nhiệm: xử lý đầu vào như một chuỗi xử lý, ví dụ. các phím toàn cầu (ví dụ: để chụp ảnh màn hình), sau đó GUI (ví dụ: trong trường hợp hộp văn bản được tập trung hoặc menu được bật lên), sau đó trò chơi (ví dụ: để di chuyển một ký tự)
  • Lệnh: đóng gói chức năng trò chơi dưới dạng các lệnh có thể được nhập vào bảng điều khiển, được lưu trữ và phát lại hoặc thậm chí được viết kịch bản để giúp kiểm tra trò chơi
  • Người hòa giải: triển khai các thực thể trò chơi như một lớp hòa giải nhỏ hoạt động trên các thành phần khác nhau (ví dụ: đọc từ thành phần sức khỏe để truyền dữ liệu đến thành phần AI)
  • Người quan sát: có biểu diễn có thể hiển thị của một nhân vật lắng nghe các sự kiện từ biểu diễn logic, để thay đổi cách trình bày trực quan khi cần thiết mà không cần logic trò chơi cần biết bất cứ điều gì về kết xuất mã
  • Trạng thái: lưu trữ NPC AI là một trong một số trạng thái, ví dụ: Tấn công, lang thang, chạy trốn. Mỗi người có thể có phương thức update () riêng và bất kỳ dữ liệu nào khác mà họ cần (ví dụ: lưu trữ nhân vật mà nó đang tấn công hoặc chạy trốn khỏi khu vực mà nó đang đi lang thang, v.v.)
  • Chiến lược: chuyển đổi giữa các phương pháp phỏng đoán khác nhau cho tìm kiếm A * của bạn, tùy thuộc vào loại địa hình bạn đang ở hoặc thậm chí có thể sử dụng cùng một khung A * để thực hiện cả việc tìm đường và lập kế hoạch chung hơn
  • Phương thức mẫu: thiết lập thói quen 'chiến đấu' chung chung, với các chức năng móc khác nhau để xử lý từng bước, ví dụ: giảm đạn, tính toán cơ hội trúng, giải quyết trúng hoặc bỏ lỡ, tính toán thiệt hại và mỗi loại kỹ năng tấn công sẽ thực hiện các phương pháp theo cách riêng của họ

Một số mẫu bỏ đi do thiếu cảm hứng.


Một cuộc thảo luận rất sáng sủa
Andrew Wang

+1 cho mẫu Chiến lược. Tôi đã sử dụng nó cho mục đích chính xác đã nêu ở trên (cắm các phương pháp phỏng đoán A * khác nhau).
Mike Strobel

1
cảm ơn vì câu trả lời này, những âm thanh đó giống với mẫu thiết kế hơn so với "singleton" thông thường mà tôi đang nghe thấy ở khắp mọi nơi ...
jokoon

Danh sách lớn các ví dụ. Mặc dù lạm dụng lâu dài mô hình singleton (trạng thái toàn cầu trá hình), có những cách sử dụng hợp pháp: Khi nó đại diện cho một tài nguyên mà bạn thực sự chỉ có (hoặc muốn). Đây có thể là một cái gì đó như gói phần cứng (ví dụ: bàn phím / chuột) hoặc gói thư viện không được cấp lại (nó xảy ra và không phải tất cả các ngôn ngữ đều có từ khóa đồng bộ hóa kỳ diệu).
charstar

11
Tôi vẫn sẽ không sử dụng singletons cho tài nguyên phần cứng - các mục mà bạn nghĩ rằng bạn sẽ chỉ có 1 xu hướng nhân lên sau này, giống như thẻ video và màn hình đã làm như những năm qua. Tương tự, trong một số API, bạn cần đọc 2 cần điều khiển để hiểu 1 gamepad. Vì vậy, tôi muốn nói, nếu bạn chỉ cần một thứ gì đó, chỉ cần khởi tạo một cái duy nhất, đừng thực thi các hạn chế tùy ý có thể không cần thiết.
Kylotan

59

Tôi đã viết một cuốn sách về chính xác chủ đề đó: Các mẫu lập trình trò chơi . Các chương có thể có ích cho bạn.


2
+1 Tôi đã hy vọng ai đó đã liên kết với điều đó và tôi thấy rằng tác giả có! Mô tả mẫu thành phần ở đó khá hữu ích và tôi muốn bạn thử sử dụng các ví dụ mã hoàn chỉnh để trình bày.
CodexArcanum

2
Vâng - tôi nhớ đọc liên kết của bạn một vài năm trước. Bạn nên hoàn thành những bài viết!
onedayitwillmake

2
Bây giờ cuốn sách đã hoàn thành :)
dusan

1
Một nguồn tài nguyên tuyệt vời giúp tôi dịch kiến ​​thức lập trình hiện có của mình sang lập trình cho các trò chơi. Cảm ơn đã viết nó!

Giải thích về các mẫu lập trình trò chơi này thực sự đã giúp tôi hiểu các mẫu thiết kế - theo cách mà không có cuốn sách mẫu thiết kế phần mềm nào thực sự làm được! Đây là một phần sức mạnh của sự phát triển trò chơi (ví dụ cụ thể bằng ngôn ngữ nói với tôi và cho phép tôi phát triển tổng thể tốt hơn), nhưng phần lớn hơn vì văn bản quá xuất sắc.
Kzqai

19

Một điều mà Brandon Eich có ý thức tốt trong việc đưa ra Coders tại nơi làm việc là các mẫu là hack và cách giải quyết: [Các mẫu] cho thấy một số khiếm khuyết trong ngôn ngữ. Những mẫu này không miễn phí. Không có bữa trưa miễn phí. Vì vậy, chúng ta nên tìm kiếm sự tiến hóa trong ngôn ngữ có thêm các bit đúng.

Là lập trình viên trò chơi thay vì thiết kế trình biên dịch, chúng tôi hiếm khi có tùy chọn phát triển ngôn ngữ chúng tôi sử dụng, nhưng chúng tôi có thể học cách phát triển phong cách của riêng mình để phù hợp hơn với ngôn ngữ và yêu cầu của chúng tôi. Các mẫu là một số trong số này, nhưng không sử dụng các mẫu là một phần khác, đặc biệt là như Brandon nói, các mẫu hiếm khi đi mà không có hiệu năng đáng chú ý hoặc chi phí bộ nhớ hoặc mã linh hoạt. MVC không phải là một mô hình tuyệt vời cho nhiều thứ trong các trò chơi. Singleton là một cách giải quyết cho các quy tắc khởi tạo tĩnh C ++ khập khiễng và có lẽ bạn không nên thực hiện chúng. Factory đơn giản hóa việc tạo đối tượng phức tạp - có thể các đối tượng của bạn nên đơn giản hơn để bắt đầu. Các mô hình phổ biến là công cụ để sử dụng khi chúng ta cần chúng để quản lý một cái gì đó phức tạp, không phải là công cụ chúng ta nên mong muốn sử dụng để xây dựng một cái gì đó phức tạp khi bắt đầu.

Mã (trò chơi) tốt có thể sử dụng các mẫu hoặc có thể không. Nếu nó sử dụng các mẫu, tốt thôi - chúng là một công cụ giao tiếp tuyệt vời để giải thích cấu trúc mã cho các lập trình viên khác ở mức độ cao, không phụ thuộc vào ngôn ngữ. Nếu bạn nghĩ rằng mã tốt hơn mà không cần sử dụng một mẫu, đừng tự đánh bại nó - có lẽ là vậy.


4
Đúng, một trong những điều được làm rõ trong cuốn sách gốc (nhưng thường bị bỏ qua) là nếu nó được viết cho C thay vì C ++ / Smalltalk, chúng có thể đã bao gồm một mẫu "Kế thừa" và bởi cùng một mã thông báo, một số ngôn ngữ có thể chứa một số mẫu GoF đã được tích hợp sẵn.
Kylotan

13
Một điều khác thường bị bỏ qua trong cuốn sách gốc (cuốn sách gốc ban đầu của Alexander, không phải GoF) là các mẫu là một công cụ để giao tiếp , không phải thực hiện . Họ cho phép các nhà thiết kế giao tiếp về việc thực hiện ở mức cao hơn và được xác định bởi vì họ đang định kỳ, không nhất thiết vì họ nên được sử dụng khi có thể.

1
Tuy nhiên, chỉ có thuật ngữ có thể giúp bạn suy luận về vấn đề và nhận ra khi cách tiếp cận như vậy là một giải pháp tốt. Các mẫu tốt nhất thường được tinh chỉnh theo thời gian bởi các công nhân lành nghề và có kinh nghiệm, và các công nhân kém kỹ năng hơn sẽ không tự khám phá các mẫu tương tự mà không có các ví dụ được mã hóa này.
Kylotan

Tôi đồng ý rằng có thuật ngữ là tuyệt vời, và một phần của định nghĩa của một mẫu là nó là một giải pháp định kỳ tốt cho một số vấn đề. Thật không may, những công nhân kém kỹ năng có xu hướng tìm thấy chủ yếu là Singleton và áp dụng nó cho mọi vấn đề, ngay cả khi vẫn chưa có vấn đề gì.

Cảm ơn phản hồi này; Tôi cảm thấy nhẹ nhõm khi đọc rằng mẫu thiết kế được tạo ra để giải quyết các vấn đề do thiết kế của phần mềm tạo ra. Tôi nghĩ rằng cấu trúc của toàn bộ phần mềm lớn nên được suy nghĩ xuyên suốt từ đầu đến cuối trước khi thực sự bắt đầu viết mã bất cứ điều gì. Bạn không thể luôn luôn triển khai các chức năng một lần, đôi khi bạn phải suy nghĩ về từng tính năng cụ thể và kiểm tra xem liệu nó có gây rối với cấu trúc toàn cầu của phần mềm hay không hoặc tìm hiểu cách thức phần mềm được thay thế hành xử. Việc phân chia nhiệm vụ cho một số lập trình viên đôi khi có thể tạo ra mâu thuẫn ...
jokoon

7

Tất nhiên, như những người khác đã nói, tất cả các mẫu đều hữu ích trong trường hợp phù hợp và một phần của việc học cách sử dụng chúng là học khi nào nên sử dụng chúng. Tuy nhiên, cuốn sách xuất sắc Kỹ thuật và thuật toán cốt lõi trong lập trình trò chơi của Daniel Sanchez-Crespo Dalmau, liệt kê sáu mẫu lập trình và sáu mẫu khả dụng đặc biệt hữu ích trong lập trình trò chơi.

Lập trình:

  • Singleton: Tôi không ghét điều này giống như nhiều người làm; nó có thể được sử dụng cho những thứ như trình phát một người chơi hoặc đầu đọc bàn phím.
  • Factory: Cho phép bạn tạo và phá hủy các đối tượng một cách hiệu quả.
  • Chiến lược: Cho phép bạn thay đổi chiến lược AI một cách thanh lịch.
  • Chỉ mục không gian: Giúp thực hiện các truy vấn trên các tập dữ liệu không gian.
  • Hợp chất: Thiết lập một đối tượng thừa kế hữu ích.
  • Fly weight: Giải phóng bộ nhớ bằng cách khái quát những thứ như kẻ thù giống hệt nhau.

Khả năng sử dụng:

  • Shield: Bảo vệ khỏi sự kích hoạt tình cờ của các hành động kịch tính.
  • Trạng thái: Dấu hiệu trực quan của trạng thái thế giới / UI.
  • Tự động hủy chế độ: Làm cho trò chơi hoạt động tích cực hơn.
  • Từ tính: Tự động và lựa chọn đơn vị dễ dàng.
  • Tập trung: Loại bỏ các yếu tố UI gây mất tập trung.
  • Tiến độ: Toàn cầu hữu ích.

Cuốn sách, tất nhiên, đi vào chi tiết hơn về mỗi trong số này.


Cảm ơn các đầu vào! Tôi đã không biết về cuốn sách đó, nhưng sẽ xem xét nó ngay bây giờ như là kết quả của bài viết của bạn. Cảm ơn một lần nữa!
jcurrie33

2
Singleton cho trình đọc bàn phím chính xác là tình huống mà tôi phải hỏi - Bạn có thực sự không chỉ biến nó thành một con trỏ toàn cầu được thiết lập sớm trong chức năng chính của mình không? Bạn đã bao giờ thực sự vô tình khởi tạo hai trình đọc bàn phím chưa?

Xin vui lòng ghét singleton. Nó làm hai việc kém. Truy cập toàn cầu và arity. Thông thường các nhà phát triển nghĩ rằng truy cập toàn cầu == singleton. Có một rất ít vấn đề hơn cần một singleton đúng, và có thể một vài chi tiết mà tao nhã hơn khi giải quyết với một singleton.
deft_code

7

Hệ thống thực thể là một loại mô hình tốt đẹp. Nó không chính xác là một mẫu thiết kế vì nó không khéo léo OOP. Tuy nhiên, bạn có thể trộn nó với OOP.

Một số liên kết tốt (bắt đầu từ đầu cho phần giới thiệu):


3
"Nó không chính xác là một mẫu thiết kế vì nó không khéo léo [sic] OOP." Các mẫu thiết kế không liên quan gì đến OOP; nếu bất cứ điều gì, bản thân OOP là một mẫu thiết kế. Các mẫu thiết kế xuất hiện không chỉ bên ngoài OOP, mà bên ngoài phát triển phần mềm hoàn toàn.

Có những OOP design patternsthứ thường thể hiện mối quan hệ và tương tác giữa các lớp / đối tượng. Và còn nhiều mẫu thiết kế khác. OOP là một tập hợp các khái niệm, không phải là một mô hình thực sự. Design patternlà một khái niệm, quá.
topright

6
Thay vì nói về ngữ nghĩa, bạn không nên đánh giá sự hữu ích của phản hồi tôi đã đưa ra?
Wernight

6

Tất cả bọn họ. Ngoại trừ Singleton. [/ flippancy]


Bạn có thể đặt tên cho một hoặc hai mẫu thiết kế mà bạn đã sử dụng thường xuyên trong quá trình phát triển trò chơi của mình không và vì lý do gì? Là người mới bắt đầu liên quan đến các mẫu thiết kế, "tất cả chúng" không phải là một phản ứng đặc biệt hữu ích. Cảm ơn bạn đã trả lời, mặc dù.
jcurrie33

5
Hỏi "bạn đã sử dụng mô hình nào?" giống như hỏi "bạn đã sử dụng tên biến nào?" Nó đi xuống phong cách cá nhân và yêu cầu và tên miền. Tại một số điểm, bạn có thể sẽ sử dụng bất kỳ mẫu nào đã được đặt tên. Bạn có thể sẽ sử dụng nhiều cái khác chưa được đặt tên, và thậm chí có thể phát minh ra một số cái mới.

@ jcurrie33: xin lỗi, tôi không thể cưỡng lại việc đào tại singletons trước. ;)
Kylotan

6

Không thực sự về các mẫu, nhưng về các nguyên tắc cơ bản đằng sau chúng. Trong "Design Patterns: Elements of Reusable Software Object-Oriented" (1995) , các băng đảng của bốn (Gamma, Erich; Richard Helm, Ralph Johnson, và John Vlissides) khuyến cáo chỉ có hai nguyên tắc cho hướng đối tượng thiết kế: (1) chương trình để một giao diện và không triển khai và (2) ủng hộ thành phần đối tượng hơn kế thừa lớp.

Hai nguyên tắc này rất hữu ích trong nhiều nhiệm vụ phát triển trò chơi. Ví dụ, nhiều lập trình viên trò chơi đã sử dụng hệ thống phân cấp lớp sâu để thể hiện các thực thể trò chơi. Có một cách tiếp cận khác dựa trên thành phần - các đối tượng trò chơi dựa trên thành phần. Bài viết về phương pháp này. Thậm chí nhiều liên kết hơn . Đây là một ví dụ mẫu trang trí .


Các thành phần được sử dụng trong thiết kế trò chơi giống như một mẫu chiến lược trạng thái - được thể hiện một cách tự nhiên như các bao đóng bên ngoài C / C ++ / Java / C # và như các đối tượng thành phần bên trong chúng. Các mẫu trang trí giống như một proxy; quyền sở hữu và luồng dữ liệu của nó trái ngược với những gì chúng ta thường có nghĩa là khi chúng ta nói về các hệ thống thành phần trong trò chơi.

Các thành phần cũng cần nói chuyện với nhau, đưa vào các mẫu như Người hòa giải, Người quan sát và Nhà soạn nhạc. "Trò chơi dựa trên thành phần" là một mẫu thiết kế tổng hợp.
CodexArcanum

@CodexArcanum, Observer, chắc chắn, nhưng không phải lúc nào cũng là Người hòa giải (Chuỗi trách nhiệm có thể được sử dụng thay thế). Nó chỉ là Trình soạn thảo nếu GameObject (bao gồm GameObjectComponent) là GameObjectComponent (không phải là không cần thiết).
topright

6

Các mẫu hoa văn một cách tò mò lặp đi lặp lại có thể được thực sự hữu ích để tránh các phương pháp ảo và hình phạt hiệu suất có thể đến từ các cuộc gọi chức năng ảo.

Đây có thể là mẫu thích hợp khi bạn thực sự không cần phải có một loại lớp cơ sở có giao diện mà bạn theo đuổi, nhưng bạn muốn có các hành vi và giao diện được đặt tên tương tự.

Ví dụ, bạn có thể sử dụng điều này khi biên dịch các lớp cho nhiều nền tảng hoặc công cụ (dx so với opengl) trong đó phương sai của kiểu được biết đến tại thời điểm biên dịch.


Tôi luôn ghét rằng lớp trừu tượng os là ảo. Nó không giống như bạn sẽ cần hai lớp abtraction os. Tốt hơn nhiều để sử dụng CRTP.
deft_code

Có lẽ tôi chỉ cũ, nhưng tôi thậm chí sẽ không sử dụng CRTP cho giao diện DX / OpenGL hoặc nền tảng. Quá chậm để biên dịch - Tôi chỉ sử dụng typedefs. CRTP là tốt khi bạn muốn chia sẻ giao diện và triển khai giữa các lớp nhưng không có mối quan hệ nào khác, không phải khi bạn chỉ muốn chọn một cấu trúc này hay cấu trúc khác.

4

Một mẫu thiết kế mà tôi đã phát triển trong suốt nhiều năm, và nó rất hữu ích với tôi, là thứ mà tôi gọi là "bộ định nghĩa được môi giới"; Làm thế nào để tóm tắt nó theo thuật ngữ GOF có vẻ gây tranh cãi, nhưng câu hỏi này tôi đã viết về nó trên StackOverflow đi vào một số chi tiết về nó.

Khái niệm cốt lõi là một số thuộc tính của một mô hình, như loài của sinh vật, được thiết lập sao cho mỗi giá trị có thể có của thuộc tính có một đối tượng định nghĩa tương ứng - một đối tượng được chia sẻ cho mỗi giá trị - chỉ định hành vi của nó, và những thứ này được truy cập thông qua một nhà môi giới trung tâm (mà GOF-khôn ngoan, có thể là Cơ quan đăng ký, Nhà máy hoặc cả hai). Theo cách sử dụng của tôi, chúng cũng thường được truy cập thông qua các khóa vô hướng, để tạo điều kiện ràng buộc yếu cho các mục đích hình thái thời gian chạy.


Tôi không thấy đây là một singleton như thế nào và khi thảo luận về mô hình cân nặng, từ "đăng ký" là dư thừa. Đây chỉ là trọng lượng.

Sự hiểu biết của tôi từ luồng SO là mọi người xác định Singleton là một phần của nó vì các định nghĩa được thiết lập là các lớp. Theo như Registry, tôi không thấy nó có thể dư thừa như thế nào khi có thể thay thế hoặc kết hợp với Factory.
hỗn loạn

-1, trong phạm vi các mô hình là về việc giao tiếp nhanh chóng, đây có lẽ là thất bại lớn nhất tôi từng thấy. Tôi thực sự không thể coi mô tả này một cách nghiêm túc.

Chúa ơi, xin lỗi vì đã không cắt bánh quy đủ cho bạn. Bạn cũng sẽ bỏ phiếu cho câu trả lời "Hệ thống thực thể" bởi vì nó không được tóm tắt ngay lập tức theo thuật ngữ GOF?
hỗn loạn

1
Một số lượng "trình cắt cookie", hoặc ít nhất là rõ ràng về ngữ nghĩa, chính xác là những mẫu nào phải hữu ích. Các thuật ngữ như "fly weight" và "singleton" vì chúng thường được hiểu là loại trừ lẫn nhau. Đầu tiên là về việc tự động chia sẻ dữ liệu giữa nhiều trường hợp; thứ hai là về việc có chính xác một trường hợp. Tôi không nói rằng sự lựa chọn thiết kế của bạn là vô ích hoặc thậm chí là xấu, nhưng việc nhồi nhét các tên mẫu "đủ gần" lại với nhau chỉ khiến mọi người bối rối hơn. (Vui lòng không tải xuống cá nhân, đặc biệt là trên CW.)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.