Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Środa, 18 Lipiec 2018
Zarejestrowanych użytkowników: 4
Dostępnych pytań testowych: 102
HOME
Strona tytułowa pracy dyplomowej
NAUKA
Materiały dydaktyczne związane z OOP
TESTY
Sprawdzenie poziomu zdobytej wiedzy
ZASOBY
Literatura i zasoby sieciowe o OOP
ŹRÓDŁA
Zbiór projektów dydaktycznych z OOP
KONTO
Możliwość śledzenia własnych postępów
INFO



Modyfikacje wzorca Singleton

Popularną modyfikacją wzorca projektowego Singleton jest umożliwienie klientowi tworzenie nie jednej lecz określonej liczby egzemplarzy danej klasy. Za przykład posłuży dostęp do ograniczonej liczby zasobów. Deklaracja klasy Zasob może być następująca:

class Zasob {
public:
	static Zasob * pobierzZasob ();
	void uzyjZasob ();
	~Zasob();
private:
	Zasob ();
	Zasob (const Zasob & z);
	static unsigned int DOSTEPNYCHZASOBOW;
};

Plik nagłówkowy deklaruje metodę pobierzZasob() do pobrania wolnego zasobu, destruktor (publiczny) do zwolnienia zasobu oraz prywatne: konstruktor bezargumentowy i konstruktor kopiujący. Dodatkowo prywatna składowa statyczna DOSTEPNYCHZASOBOW określa liczbę zasobów jakie jeszcze można przydzielić.

Definicje metod są bardzo proste – pobierzZasob() zwraca albo egzemplarz zasobu albo wyjątek (brak dostępnych zasobów):

Zasob * Zasob::pobierzZasob () {
	if (DOSTEPNYCHZASOBOW > 0) {
		--DOSTEPNYCHZASOBOW;
		return new Zasob();
	} else {
		throw std::exception("WYJATEK - Nie ma wolnego zasobu");
	}
}

Destruktor zwalnia zasób:

Zasob::~Zasob() {
	++DOSTEPNYCHZASOBOW;
	std::clog << "Zwrocenie zasobu" << std::endl;
}

Pozostałe definicje służą jako elementy pomocnicze (wypisywanie informacji o przydzieleniu i używaniu zasobów).

void Zasob::uzyjZasob () {
	std::clog << "Uzycie zasobu." << std::endl;
}

Zasob::Zasob () {
	std::clog << "Tworzenie zasobu." << std::endl;
}

unsigned int Zasob::DOSTEPNYCHZASOBOW = 3;
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11