- VisualStudio2022
- pprof-Hướng dẫn sử dụng nó trong bản mạng trực tiếp
- Triển khai C# các loại hộp chọn nhiều màu lựa chọn thả xuống, cây lựa chọn nhiều màu lựa chọn thả xuống và các nút tối đa
- [Ghi chú học tập] Cơ sở dữ liệu cấu trúc: cat tree
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.
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.
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.
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! .
Tôi nên làm như sau: Có thể thông báo một dịch vụ/nhà máy, sử dụng API truy vấn $q (async) để lấy một tập dữ liệu lớn về tên Có một dịch vụ khác (cũng không có đồng bộ) sẽ chỉ trả về các phần tử từ nhà máy nếu chúng khớp với một chuỗi mục tiêu phù hợp (tìm kiếm) phù hợp để giảm bớt
Tôi có một lớp cơ sở chung. Tôi có một cơ sở phát triển lớp cơ sở. nhà máy để cung cấp các loại công cụ khác nhau? Ví dụ: lớp công khai ReceptBase trong đó T : IInte
Tôi đang xem tiện ích mở rộng Ninject Factory tại liên kết sau: http://www.planetgeek.ch/2011/12/31/ninject-extensions-factory-intro
Sự khác biệt giữa các điều khoản nhà máy, nhà cung cấp và dịch vụ là gì? Vừa phải tìm hiểu về NHibernate và kho lưu trữ mẫu của nó (các lớp POCO, vv). chọn loại dựa trên bất kỳ bối cảnh nào
Sử dụng CGLIB tôi có thể thực hiện var Enhancer = new Enhancer();
Tôi đang cố gắng tạo một lớp bên trong lồng nhau trong Kotlin bằng cách sử dụng phương thức xuất xưởng đối tượng Đây là phiên bản mã hóa đơn giản của lớp tôi. OuterClass { var myData:L
Về cơ bản, dự phòng dự án bao gồm một ứng dụng máy khách và tôi muốn tạo một gói để liên lạc với gói dữ liệu. nội dung. Bây giờ tôi có thể có một vấn đề khác
(6 câu trả lời lời) Object sl là gì?
Tôi muốn mọi ứng dụng bên ngoài sử dụng giao diện của lớp Socket, bao gồm một số lớp (ServerSocketTCP, ClientSocketTCP, ServerSocke
Tôi chưa quen với Angularjs và tôi đang cố gắng tạo ra một cơ sở dữ liệu nhỏ về phim. Đây là lần đầu tiên tôi sử dụng. nhà máy và tôi muốn chắc chắn rằng đây là cách tiếp cận đúng và cách nào tôi có thể sử dụng nhà máy này trong một chức năng khác như bên dưới?
Câu hỏi này đã có câu trả lời ở đây: Lớp bên trong Java và lớp lồng tĩnh (28 câu trả lời) Đã đóng 5 năm trước lớp. DataFactory công khai
Tôi đã xem rất nhiều bài viết về các nhà máy C++, nhưng cho đến nay tôi vẫn chưa tìm ra giải pháp nào cho vấn đề của mình. (Mặc dù tôi có thể thiếu thứ gì đó.) Mẫu điều khiển bảng ứng dụng: #include #include #include
Đây là một dự án đơn giản C++ đơn giản với 2 thiết kế mẫu: singleton và Factory sigleton cũng là một lớp được tạo mẫu mã, một giao dịch giao diện (IHash) và một lớp (Hash1). Một lớp nhà máy đơn giản (Hash
Câu hỏi này tương tự như Factory và generics và có thể có cùng một câu trả lời, nhưng lại khác. được mở rộng bởi các lớp trong một JAR hoàn toàn riêng biệt. nào khác
Vấn đề là tôi phải tạo một lớp mới có thể được truyền vào. chấp nhận bất kỳ số lượng đối số nào không? hàm createInstance(ofClass, arg1, arg2, arg3, ...
Tôi muốn tạo một phương thức xuất xưởng đơn giản bằng cú pháp C++ đơn giản: void *createObject(const char *str,...) { if(!strcmp("X",str)) retu
Sau khoảng 10 tháng học trình cài đặt PHP, giờ tôi đang cố gắng bắt đầu với các nguyên tắc cơ bản OOP và các thiết kế mẫu. Đây là một sở hữu và tôi không có nhiều thời gian để theo đuổi nó, vì vậy xin lỗi ở mức độ thấp của câu hỏi này. Trang web của tôi (hiện tại là chương trình 100%
Tôi có một câu hỏi đơn giản. tôi có một máy đơn giản /**
Tôi đang cố gắng cung cấp mã thông báo APP_BASE_HREF trong mô-đun được tải từng phần, tuy nhiên, phương thức sản xuất vườn hoàn chỉnh không được gọi. Đây https://github.com/MaurizioCascia
Tôi có ast sau: import { Factory as f } from 'TypeScript' const typeDeclaration = f.createTypeAliasDeclara
Tôi là một lập trình viên xuất sắc, rất xuất sắc!