cuốn sách gpt4 ai đã làm

Học mẫu thiết kế (2) Mẫu nhà máy - Mẫu nhà máy trừu tượng + Sổ đăng ký

In lại Tác giả: Sahara Thời gian cập nhật: 2024-07-09 21:03:39 60 4
mua khóa gpt4 Nike

Mục lục
  • Lời nói đầu
  • Sử dụng các cải tiến nhà máy đơn giản
  • Sử dụng cải tiến đăng ký
  • Bài viết tham khảo

Lời nói đầu

Trong bài viết trước, chúng tôi đã đề cập đến một số thiếu sót của phiên bản đầu tiên của mã mẫu nhà máy trừu tượng: ① Máy khách vi phạm nguyên tắc mở và đóng ② Nhà cung cấp vi phạm nguyên tắc mở và đóng. Bài viết này sẽ thảo luận về hai điểm này.

Sử dụng các cải tiến nhà máy đơn giản

Về thiếu sót ①, chúng ta có thể sử dụng ý tưởng về một nhà máy đơn giản để cải thiện phiên bản đầu tiên của mã nhà máy trừu tượng. Đối với ví dụ trong bài viết trước, chúng tôi đã loại bỏ CameraFactory, BaslerCameraFactory và SickCameraFactory và thay thế chúng bằng lớp SimpleFactory.

Sơ đồ lớp như sau:

Mã này như sau:

// Lớp nhà máy SimpleFactory { public: BaslerCamera* CreateBaslerCamera() { if ("Linux" == os_name_) { return New LinuxBaslerCamera(); } else if ("Windows" == os_name_) { return New WindowsBaslerCamera() } else if ("Windows" == os_name_) { return new WindowsBaslerCamera(); { return nullptr; } } SickCamera* CreateSickCamera() { if ("Linux" == os_name_) { return new LinuxSickCamera(); } else if ("Windows" == os_name_) { return new WindowsSickCamera(); } else { return nullptr; } } public: std::string os_name_ = "Linux" }; /Client int main() { SimpleFactory* camera_factory = new SimpleFactory(); camera_factory->CreateBaslerCamera(); basler_Camera->OpenCamera(); SickCamera* disease_Camera = camera_factory->CreateSickCamera(); disease_Camera->OpenCamera();

Lưu ý rằng mặc dù phương pháp trên đã cải thiện được nhược điểm ① nhưng nhược điểm ② vẫn tồn tại.

Sử dụng cải tiến đăng ký

Về khuyết điểm ②, bản chất là: khi thêm sản phẩm mới, việc sửa đổi hạng nhà máy vi phạm nguyên tắc đóng mở. Đối với tình huống này, chúng ta có thể tham khảo sổ đăng ký được đề cập trong "Học mẫu thiết kế (2) Mẫu nhà máy - Mẫu phương thức nhà máy + Sổ đăng ký" để loại bỏ các phán đoán nhánh như chuyển đổi hoặc nếu và tách rời khớp nối do các phán đoán nhánh gây ra.

Đối với một sản phẩm cụ thể, chúng ta có thể đăng ký nó như thế này:

lớp LinuxBaslerCamera: public BaslerCamera { public: ~LinuxBaslerCamera() ghi đè = mặc định; bool OpenCamera() ghi đè { return true; } };

Sau đó, mã của lớp nhà máy có thể được đơn giản hóa thành:

class SimpleFactory { public: BaslerCamera* CreateBaslerCamera() { std::string name = os_name_ + "Basler"; return Object::CreateObject(name); } SickCamera* CreateSickCamera() { std::string name = os_name_ + "Bệnh"; trả về Object::CreateObject(name); std::string os_name_ = "Linux" };

Bằng cách này, khi thêm dòng sản phẩm (chẳng hạn như thêm HarmonyOS), chúng ta chỉ cần sử dụng ReflectRegister để đăng ký vào tệp tương ứng với lớp sản phẩm bên dưới nó, sau đó thay đổi os_name_ (tất nhiên, os_name_ cũng có thể được thay đổi từ tệp cấu hình khi đang tải, điều này tốt hơn).

Để thêm sản phẩm mới vào dòng sản phẩm hiện có (chẳng hạn như thêm máy ảnh Huaray), chức năng CreateHuarayCamera vẫn cần được thêm vào lớp xuất xưởng.

Bài viết tham khảo

1. "Mẫu thiết kế Dahua".

Cuối cùng, bài viết này về Học mẫu thiết kế (2) Mẫu nhà máy - Mẫu nhà máy trừu tượng + Mẫu đăng ký kết thúc tại đây Nếu bạn muốn biết thêm về Học mẫu thiết kế (2) Mẫu nhà máy - Mẫu nhà máy trừu tượng + Đăng ký cho nội dung của bảng. , vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

60 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress