Hiểu được ba gương sáng tạo cốt lõi

Các mẫu thiết kế phần mềm được thử nghiệm để giải quyết các vấn đề thiết kế lặp đi lặp lại. Trong số các mẫu được sử dụng thường xuyên nhất là các mẫu tạo nhất - Singleton, erty, và prit-type- mỗi vật thể được điều khiển ngay lập tức. Chọn một cách trực tiếp tác động đến mã khả năng duy trì, hiệu suất và tính toán. Điều này mở rộng hướng dẫn lặn sâu vào mỗi mẫu, khám phá các kịch bản thực tế, và cung cấp các tiêu chuẩn có thể giúp bạn đưa ra một quyết định có hiểu biết.

Mẫu độc nhất: Một trong những cách cai trị tất cả

Mô hình Singleton đảm bảo một lớp có chính xác một thể hiện và cung cấp một điểm truy cập toàn cầu cho nó. nó là một trong những mô hình đơn giản nhất, nhưng nó thường bị lạm dụng. ý tưởng chính là kiểm soát quá trình trực tiếp để cho dù có yêu cầu bao nhiêu lần, đối tượng đó được trả lại.

Làm sao để sống độc thân?

Thông thường, một lớp người Singleton có một công trình xây dựng tư nhân và một phương pháp tĩnh để trả lại ví dụ. cuộc gọi đầu tiên tạo ra đối tượng; sau đó gọi lại sử dụng cùng một ví dụ. trong môi trường đa đọc, đồng bộ hóa là cần thiết để ngăn chặn điều kiện chủng tộc có thể tạo ra nhiều trường hợp.

public class DatabaseConnectionPool {
 private static DatabaseConnectionPool instance;
 private DatabaseConnectionPool() { /* initialization */ }
 public static synchronized DatabaseConnectionPool getInstance() {
 if (instance == null) {
 instance = new DatabaseConnectionPool();
 }
 return instance;
 }
}

Khi người độc thân chiếu sáng

  • Quản lý tài nguyên chung:) Một hồ bơi kết nối, dịch vụ ghi nhật ký, hoặc một trình quản lý cấu hình hưởng lợi ích từ một điểm phối hợp.
  • Nhà nước Global:) khi một bộ nhớ tạm rộng rộng hoặc đăng nhập cần truy cập nhất định.
  • Hệ thống tập tin [FLT:] Hrdware hay hệ thống hệ thống hệ thống hệ thống quản lý cửa sổ: hệ thống tập tin, ống dẫn máy in, hoặc bộ quản lý cửa sổ thường cho phép chỉ một tiến trình.

Những cạm bẫy thông thường cần tránh

  • Quá mức:) Dùng Singleton cho mọi thứ dẫn đến quan hệ phụ thuộc bị ẩn và làm cho đơn vị thử nghiệm khó khăn vì bạn không thể dễ dàng thay thế biểu hiện bằng một lời chế nhạo.
  • [Fread-safey trên:) phương pháp đồng bộ cổ điển có thể trở thành một nút cổ chai. Các phương pháp khác như là bắt đầu hoặc kiểm tra hai lần (với sự thay đổi) giảm xung đột.
  • ] sự kết nối chặt chẽ: vì điểm truy cập toàn cầu là khó mã hóa, khách hàng trở thành kết hợp với lớp học đơn giản, vi phạm nguyên tắc phụ thuộc.

Dù có những nhược điểm này, Singleton vẫn hữu ích khi bạn thật sự cần một vật thể có thể truy cập toàn cầu, có thể hiểu sâu hơn [FLT: 0], xem sách hướng dẫn đơn lẻ của sư phụ [FLT: 1].

Mẫu nhà máy: Tạo đối tượng

Các mẫu nhà máy [FLT: 1] (một phương pháp đơn giản để trả lại các đối tượng mới) và Nguyên tố chính (gia đình phương pháp liên quan). Cả hai đều giải mã các mã từ hạng bê tông, khuyến khích sự kết hợp và dễ dàng hơn.

Phương pháp nhà máy trong chi tiết

Xác định một giao diện để tạo một đối tượng, nhưng hãy để cho các hạng phụ thay đổi loại đồ vật sẽ được tạo ra. Ví dụ, lớp thoại có thể có một phương pháp . Lớp con như WindowsDilog và LinuxDilog thay đổi phương pháp này để trả lại các nút nền tảng riêng biệt.

abstract class Dialog {
 abstract Button createButton();
 public void render() {
 Button okButton = createButton();
 okButton.onClick();
 }
}
class WindowsDialog extends Dialog {
 Button createButton() { return new WindowsButton(); }
}

Mô hình này là lý tưởng khi:

  • Một lớp học không thể dự đoán được lớp vật mà nó phải tạo ra.
  • Bạn muốn định vị các đối tượng tạo ra logic ở một nơi.
  • Hệ thống cần phải được độc lập với cách mà các vật thể được xây dựng.

Nhà máy trừu tượng: Các gia đình sản xuất các đối tượng liên quan

Nhà máy trừu tượng cung cấp một giao diện để tạo các gia đình có các đối tượng liên quan hay phụ thuộc mà không cần xác định các hạng bê tông. Hãy nghĩ về một công cụ GUI cần phải tạo nút, hộp chọn và khung cuộn phù hợp với một chủ đề đã cho trước (v. d. vật liệu, Cupertino). Khách hàng này dùng giao diện trừu tượng để lấy sản phẩm, và nhà máy bê tông (máy tính, CupertinoFactor) tạo ra các biến thể chính xác.

Mẫu này được ưu tiên khi:

  • Hệ thống phải được cấu hình với một trong nhiều gia đình sản phẩm.
  • Bạn muốn áp dụng sự nhất quán giữa các sản phẩm.
  • Thêm các gia đình sản phẩm mới đòi hỏi ít thay đổi mã đã có.

Quyết định giữa các nhà máy và các gương mẫu khác

Nhà máy là khi bạn tạo vật phức tạp hoặc khi bạn cần trao đổi các tiến trình thực hiện vào lúc chạy. Nó linh hoạt hơn Singleton vì nó không hạn chế số trường hợp - nó chỉ tập trung tạo ra. Khác với nguyên mẫu, nhà máy tạo ra những trường hợp mới từ vết xước thay vì sao chép các biến thể đã có. Để xem tổng quát cả hai biến thể, hãy truy cập [FL: 0] Phục hồi lại trang [FL1] và [FL:] [FL: T] [T] Phần tử At].

Mẫu mẫu mẫu mẫu mẫu mẫu mẫu mẫu mẫu mẫu: Crone thay cho cấu trúc

Mô hình mẫu nguyên mẫu tạo đối tượng mới bằng cách sao chép một vật thể đã tồn tại. Nó đặc biệt có giá trị khi tính ngắn (v. d., các bản tóm tắt cơ sở dữ liệu nặng, tính toán hình học phức tạp) hoặc khi cấu hình vật thể là tốn thời gian. Thay vì xây dựng từ con số không, bạn nhân bản một ví dụ đã cấu hình sẵn và chỉnh sửa nó khi cần thiết.

Bộ phận cơ khí: Oow vs. in sâu

Phần lớn các ngôn ngữ lập trình cung cấp phương pháp nhân bản có sẵn ( trong Java, trong Python, hoặc lan rộng trong JavaScript. Tuy nhiên, bạn phải cẩn thận chú ý đến việc bản sao là nông (đã chia sẻ cho đối tượng có thể bị biến đổi) hay sâu (rất độc lập). Một bản sao chép lại tất cả các vật được liên quan đến nhân bản. Khi thực hiện mô phỏng, bạn phải quyết định mức độ sao chép nào thích hợp với trường hợp của bạn.

class MazePrototype {
 public MazePrototype clone() throws CloneNotSupportedException {
 return (MazePrototype) super.clone(); // shallow copy
 }
}

Những trường hợp lý tưởng cho kiểu mẫu

  • Tạo ra đối tượng phù hợp: Ví dụ, tải một cấu hình lớn từ tập tin hoặc tạo ra một đường cong hình học phức tạp.
  • Đối tượng chạy thời gian Dynamic:) Khi hệ thống phải tạo ra các đối tượng mới mà kiểu được xác định vào lúc chạy (v. d., kiểu của kẻ thù trong một trò chơi được tạo ra từ mẫu đã định sẵn).
  • Thay vì tạo ra nhiều lớp con cho những biến thể nhỏ, bạn nhân bản một mẫu thử nghiệm và điều chỉnh một vài tính chất.

Dấu và vết kiểu mẫu

Bạn có thể lấy một bước xa hơn bằng cách thực hiện một cửa hàng thiết kế mẫu trước. Ứng dụng khách yêu cầu một mẫu thử nghiệm bằng phím, nhân bản nó. Sự kết hợp này với một bảng đăng ký có thể thay thế nhẹ thành yếu tố hoặc đơn giản trong một số trường hợp. Để biết thêm chi tiết, xem [FL: 0] Phụ đề [FL: 0] Phụ đề được thực hiện bởi Động ký [FL: 1].].

So sánh theo chiều đơn: Singleton, erley, pitotype

Để giúp bạn chọn, bảng dưới đây nêu bật sự khác biệt phím:

PatternInstance CountCreation MechanismBest For
SingletonExactly oneSelf-managed global accessShared resources, global state
FactoryMultiple instances (or families)Centralized creation logicDecoupling client from concrete classes, complex creation
PrototypeMultiple instances cloned from a templateCloning (shallow/deep copy)Expensive instantiation, runtime object generation

Khi các khuôn mẫu bị quá tải hoặc kết hợp

  • Sengleton + erry: [FLT: 1] Một nhà máy có thể là một Singleton (v. d., một nhà máy trừu tượng trên mỗi nền tảng). Điều này kết hợp việc truy cập toàn cầu với sự sáng tạo tập trung.
  • Mô hình + Nhà máy:) Một bản mẫu thử nghiệm có thể hoạt động như một nhà máy - bạn nhân bản một mẫu thử nghiệm thay vì gọi một nhà xây dựng. Tính năng này đặc biệt hữu ích trong phát triển trò chơi khi tạo ra các thực thể.
  • Mô hình + Singleton:) Một vật mẫu có thể là một mô hình đơn giản theo nghĩa chỉ có một mẫu thử nghiệm tồn tại mỗi loại, mặc dù các nhân không phải là đơn.

Khung xem thử

Khi bạn đối mặt với một vấn đề thiết kế đòi hỏi một kiểu mẫu sáng tạo, hãy đặt những câu hỏi này theo thứ tự:

  1. Tôi có cần một trường hợp cụ thể nào trong suốt ứng dụng không? ) Nếu có, hãy xem xét Singleton, nhưng hãy chắc chắn rằng tình trạng chung trên toàn cầu là cần thiết và sự thử thách đó sẽ không bị ảnh hưởng.
  2. [FLT: 0] Có phải vật thể tạo ra phức tạp hay có khả năng thay đổi? ) Nếu có, hãy dùng Phương pháp Nhà máy hay Nhà máy Trừu Giá. Tính này đặc biệt có ích khi bạn dự đoán thêm các loại đối tượng mới sau này.
  3. Có phải vật thể tạo ra nút cổ chai biểu diễn, hay tôi cần nhiều trường hợp khác nhau một chút? ) Nếu có, nó có thể tiết kiệm thời gian và trí nhớ bằng cách nhân bản một mẫu.
  4. có thể nhiều hơn một mẫu phục vụ cùng mục đích? Đánh giá đánh giá đánh giá. Ví dụ, một mô hình cân Fly có thể làm giảm bộ nhớ thay vì kiểu nguyên mẫu nếu mục tiêu chia sẻ dữ liệu không thể thay đổi.

Ví dụ thực tế trong phần mềm kỹ thuật

Một hệ thống CAD có thể sử dụng Singleton cho người dùng quản lý sở thích, Xây dựng để tạo ra nhiều hình dạng hình học (clacle, polygon, trục), và kiểu dự án để nhân bản một hội nghị phức tạp và sau đó sửa đổi nó. Một động cơ mô phỏng có thể sử dụng itory để tạo ra các đối tượng giải quyết khác nhau, kiểu mẫu để sao chép cấu hình hệ thống hạt, và đơn giản hoá dịch vụ ghi chép tất cả các bước mô phỏng.

Kết luận: Đừng để khuôn mẫu làm mờ nét mặt

Một điều có thể giúp bạn hiểu những hạn chế của hệ thống: chẳng hạn như sự kiểm soát, sự phức tạp của vật thể và chi phí của các trường hợp mới. Luôn thích sự rõ ràng và khả năng thử nghiệm hơn sự tinh khiết của các mẫu.

Bằng cách làm chủ ba mẫu này, bạn trang bị cho mình một phần mềm kỹ thuật linh hoạt để xây dựng phần mềm kỹ thuật mạnh mẽ và linh hoạt. Để đọc thêm, hãy khám phá bài báo [FLT: 0] [FLT:] về thiết kế phần mềm ) và ) ).