Evgenii Legotckoi
Evgenii Legotckoi18. September 2018 04:01

Generative Designmuster - Objektpool

Ziele

Objekt-Pooling kann die Leistung erheblich verbessern; Es ist am effektivsten in Situationen, in denen die Kosten für die Initialisierung einer Instanz einer Klasse hoch und die Instanziierungsrate der Klasse hoch ist, während die Anzahl der zu einem bestimmten Zeitpunkt verwendeten Instanzen gering ist.

Probleme

Objektpools (auch als Ressourcenpools bezeichnet) werden zum Verwalten des Objekt-Caching verwendet. Ein Client, der Zugriff auf einen Objektpool hat, kann das Erstellen neuer Objekte vermeiden, indem er einfach den Pool nach einem neuen Objekt fragt, das bereits erstellt wurde. Typischerweise ist ein Pool ein wachsender Pool, d. h. der Pool selbst erstellt neue Objekte, wenn der Pool leer ist. Wir können auch einen Pool haben, der die Anzahl der erstellten Objekte begrenzt.

Es ist wünschenswert, alle wiederverwendbaren Objekte, die derzeit nicht verwendet werden, im selben Objektpool zu halten, damit sie von einer einheitlichen Richtlinie verwaltet werden können. Um dies zu erreichen, muss die wiederverwendbare Poolklasse das Singleton-Entwurfsmuster implementieren.


Diskussion

Der Objektpool ermöglicht es anderen Objekten, Objekte aus ihrem Pool zu "prüfen". Wenn diese Objekte von ihren Prozessen nicht mehr benötigt werden, werden sie zur Wiederverwendung an den Pool zurückgegeben.

Wir möchten jedoch nicht, dass der Prozess auf die Zuweisung eines bestimmten Objekts warten muss, daher erstellt der Objektpool nach Bedarf auch neue Objekte, muss aber auch eine Einrichtung verwenden, um ungenutzte Objekte regelmäßig zu bereinigen.

Struktur

Die allgemeine Idee des Verbindungspoolmusters ist, dass Sie, wenn Klasseninstanzen wiederverwendet werden können, das Erstellen von Klasseninstanzen vermeiden, indem Sie sie wiederverwenden.

  • Wiederverwendbar . Instanzen von Klassen in dieser Rolle interagieren für einen begrenzten Zeitraum mit anderen Objekten, danach werden sie für diese Zusammenarbeit nicht mehr benötigt.
  • Klient . Klasseninstanzen in dieser Rolle verwenden wiederverwendbare Objekte.
  • ReusablePool. Klasseninstanzen in dieser Rolle verwalten wiederverwendbare Objekte zur Verwendung durch Client-Objekte.

Im Allgemeinen ist es wünschenswert, alle wiederverwendbaren Objekte, die derzeit nicht verwendet werden, im selben Objektpool zu halten, damit sie von einer konsistenten Richtlinie verwaltet werden können. Daher ist die ReusablePool -Klasse für die Singleton-Klasse. Seine Konstruktoren sind privat, wodurch andere Klassen gezwungen werden, die getInstance -Methode aufzurufen, um dieselbe Instanz der ReusablePool -Klasse abzurufen.

Das Client-Objekt ruft die acquireReusable -Methode des ReusablePool -Objekts auf, wenn es ein wiederverwendbares Objekt benötigt. Das ReusablePool -Objekt verwaltet eine Sammlung wiederverwendbarer Objekte. Es verwendet eine Sammlung wiederverwendbarer Objekte, um einen Pool wiederverwendbarer Objekte aufzunehmen, die derzeit nicht verwendet werden.

Wenn der Pool wiederverwendbare Objekte enthält, entfernt die Methode acquireReusable beim Aufrufen das wiederverwendbare Objekt aus dem Pool und gibt es zurück. Wenn der Pool leer ist, erstellt die acquireReusable -Methode nach Möglichkeit ein wiederverwendbares Objekt. Wenn die Methode acquireReusable kein neues wiederverwendbares Objekt erstellen kann, wartet sie, bis das Sammlungsobjekt wieder an die Sammlung zurückgegeben wird.

Client -Objekte übergeben ein wiederverwendbares Objekt an die releaseReusable -Methode auf dem ReusablePool , wenn sie die Arbeit mit dem Objekt beendet haben. Die Methode releaseReusable gibt ein wiederverwendbares Objekt an einen Pool wiederverwendbarer Objekte zurück, die nicht verwendet werden.

In vielen Anwendungen hat das Objektpool-Entwurfsmuster Gründe dafür, die Gesamtzahl wiederverwendbarer Objekte zu begrenzen, die existieren können. In solchen Fällen ist das ReusablePool-Objekt, das wiederverwendbare Objekte erstellt, dafür verantwortlich, dass es nicht mehr Objekte als die angegebene maximale Anzahl wiederverwendbarer Objekte erstellt. Wenn ReusablePool-Objekte dafür verantwortlich sind, die Anzahl der erstellten Objekte zu begrenzen, verfügt die ReusablePool-Klasse über eine Methode, um die maximale Anzahl der zu erstellenden Objekte anzugeben. Diese Methode ist im obigen Diagramm als setMaxPoolSize aufgeführt.

Beispiel

Ein Objektpool ähnelt einem Bürolager. Bei der Einstellung eines neuen Mitarbeiters muss der Büroleiter einen Arbeitsplatz für ihn herrichten. Es berechnet, ob sich im Lager des Büros Ersatzgeräte befinden. Wenn ja, dann nutzt es der Büroleiter. Wenn nicht, gibt es eine Bestellung auf, um neue Geräte bei Amazon zu kaufen. Im Falle einer Entlassung eines Mitarbeiters wird seine Ausrüstung in ein Lager verlagert, wo sie mitgenommen werden kann, wenn ein neuer Arbeitsplatz benötigt wird.

Kontrollliste

  1. Erstellen Sie eine ObjectPool-Klasse mit einem privaten Array von Objekten darin
  2. Erstellen Sie Erfassungs- und Freigabemethoden
  3. Stellen Sie sicher, dass der ObjectPool als Singleton funktioniert

Faustregeln

  • Das Factory-Methodenmuster kann verwendet werden, um die Objekterstellungslogik zu kapseln. Nachdem sie erstellt wurden, verwaltet es sie jedoch nicht, das Objektpoolmuster verfolgt die von ihm erstellten Objekte.
  • Pel-Objekte werden normalerweise als Singleton implementiert
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken