Wzorzec projektowy pełnomocnik - proxy
Stronę tą wyświetlono już: 2591 razy
Opis wzorca projektowego pełnomocnik
Wzorzec projektowy pełnomocnik należy do wzorców strukturalnych. Jego celem jest utworzenie obiektu, który kontroluje inny obiekt. Wzorzec ten może być wykorzystany np. do inicjacji zawartego wewnątrz obiektu dopiero w momencie próby wykonania na nim jakiejś operacji. Przyczyną takiego stanu rzeczy może być fakt, że obiekt nie zawsze będzie potrzebny a jego utworzenie jest czasochłonne.
Przykład diagramu UML dla wzorca projektowego pełnomocnik
Na poniższym diagramie UML można zobaczyć interfejs iImage oraz dziedziczące po nim klasy ImageProxy (będąca pełnomocnikiem) i Image (agregowana przez pełnomocnika). W tej implementacji klasa Image dysponuje statycznym konstruktorem createImage, który sprawdza, czy plik graficzny istnieje a następnie zwraca wskaźnik na nowo utworzony obiekt tejże klasy. Jeżeli plik nie istnieje zwracany będzie NULL.
Klasa ImageProxy tworzy obiekt klasy Image dopiero, gdy będzie wywołana po raz pierwszy metoda draw.
Przykładowa implementacja wzorca projektowego pełnomocnik w C++
- #include <iostream>
- #include <string>
- #include <fstream>
- class iImage{
- public:
- virtual void draw() = 0;
- virtual ~iImage(){};
- };
- class Image : public iImage{
- public:
- Image(){
- std::cout<<"Create ImageProxy!!!"<<std::endl<<std::endl;
- }
- static Image* createImage(std::string path){
- std::ifstream imageFile(path.c_str());
- if(imageFile.good()){
- return new Image;
- }else{
- return NULL;
- }
- }
- virtual void draw() {
- std::cout << "Draw hight resolution image" << std::endl << std::endl;
- }
- virtual ~Image(){
- std::cout << "Image object destroyed" << std::endl << std::endl;
- }
- };
- class ImageProxy : public iImage{
- iImage* image;
- std::string imagePath;
- public:
- inline ImageProxy(std::string imagePath) : image(NULL), imagePath(imagePath){
- std::cout<<"Create ImageProxy object!!!" << std::endl << std::endl;
- };
- virtual void draw() {
- if(image == NULL){
- std::cout<<"Inicjalize Image object!!!"<<std::endl<<std::endl;
- image = Image::createImage(imagePath);
- }
- if(image){
- image->draw();
- }else{
- std::cout << "Some error, file not exists" << std::endl << std::endl;
- }
- }
- virtual ~ImageProxy(){
- std::cout << "Delete ImageProxy!!!" << std::endl << std::endl;
- if(image){
- delete image;
- image = NULL;
- }
- std::cout << "End of delete ImageProxy!!!" << std::endl << std::endl;
- }
- };
- int main(){
- iImage* image = new ImageProxy("admin.jpg");
- image->draw();
- if(image){
- delete image;
- image = NULL;
- }
- std::cin.get();
- return 0;
- }
Wynik działania powyższego kodu:
Create ImageProxy object!!! Inicjalize Image object!!! Create ImageProxy!!! Draw hight resolution image Delete ImageProxy!!! Image object destroyed End of delete ImageProxy!!!

Tytuł:
Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II
Autor:
Eric Freeman, Elisabeth Robson

Tytuł:
Wzorce projektowe w .NET Core 3. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#
Autor:
Dmitri Nesteruk

Tytuł:
Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku
Autor:
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Tytuł:
Projektowanie interfejsów., Sprawdzone wzorce projektowe. Wydanie III
Autor:
Jenifer Tidwell, Charles Brewer, Aynne Valencia-Brooks

Tytuł:
Kubernetes. Wzorce projektowe. Komponenty wielokrotnego użycia do projektowania natywnych aplikacji chmurowych
Autor:
Bilgin Ibryam, Roland Huß

Tytuł:
Wzorce projektowe w .NET. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#
Autor:
Dmitri Nesteruk

Tytuł:
Programowanie zorientowane obiektowo. Wzorce projektowe. Wydanie II
Autor:
Alan Shalloway, James R. Trott

Tytuł:
Java EE 8. Wzorce projektowe i najlepsze praktyki
Autor:
Rhuan Rocha, Joao Purificacao

Tytuł:
Systemy reaktywne. Wzorce projektowe i ich stosowanie
Autor:
Roland Kuhn Dr., Brian Hanafee, Jamie Allen

Tytuł:
Adaptywny kod. Zwinne programowanie, wzorce projektowe i SOLID-ne zasady. Wydanie II
Autor:
Gary McLean Hall