Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Podobne dokumenty
Programowanie obiektowe

Zaawansowane programowanie w C++ (PCP)

Analiza i projektowanie obiektowe 2016/2017. Wykład 11: Zaawansowane wzorce projektowe (1)

Wzorce projektowe. dr inż. Marcin Pietroo

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Programowanie obiektowe

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017

Technologia Programowania 2016/2017 Wykład 4

PHP 5 język obiektowy

Problemy projektowania obiektowego. Czy podobne problemy można rozwiązywac w podobny sposób?


JAVA W SUPER EXPRESOWEJ PIGUŁCE

Abstract Factory (fabryka abstrakcyjna)

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.

Model pamięci. Rafał Skinderowicz

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Projektowanie oprogramowania: wzorce architektoniczne i projektowe

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Programowanie obiektowe

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Programowanie obiektowe

Wprowadzenie do programowania aplikacji mobilnych

Dokumentacja do API Javy.

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Laboratorium 6 DIAGRAM KLAS (Class Diagram)

Wzorce projektowe strukturalne cz. 1

Builder (budowniczy) Cel: Przykład:

Diagramy klas. dr Jarosław Skaruz

Kurs WWW. Paweł Rajba.

Enkapsulacja, dziedziczenie, polimorfizm

Współbieżność w środowisku Java

Projektowanie obiektowe Wzorce projektowe

Programowanie i projektowanie obiektowe

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35

Wykład 6: Dziedziczenie

10. Programowanie obiektowe w PHP5

Polimorfizm. dr Jarosław Skaruz

Model pamięci. Rafał Skinderowicz

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce odpowiedzialności

Aplikacje w środowisku Java

Programowanie obiektowe

Programowanie obiektowe i zdarzeniowe

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie obiektowe

Dziedziczenie. Ogólna postać dziedziczenia klas:

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Zaawansowane programowanie w języku C++ Klasy w C++

Aplikacje w środowisku Java

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Java Język programowania

Programowanie obiektowe

Podstawy programowania III

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016


Rozdział 4 KLASY, OBIEKTY, METODY

Projektowanie Aplikacji Internetowych. Wzorce projektowe warstwy usług

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Wykład 5: Więcej o Klasach i Metodach

Platformy Programistyczne Podstawy języka Java

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Podstawy Języka Java

Programowanie obiektowe

Java: interfejsy i klasy wewnętrzne

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Wzorce projektowe. dr inż. Marcin Pietroo

Programowanie 2. Język C++. Wykład 3.

Klasy i obiekty cz II

Definiowanie własnych klas

(wybrane) Wzorce projektowe. Programowanie Obiektowe Mateusz Cicheński

(wybrane) Wzorce projektowe. Programowanie Obiektowe Mateusz Cicheński

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Modelowanie obiektowe

Definicje klas i obiektów. Tomasz Borzyszkowski

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Wykład 8: klasy cz. 4

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

KLASY, INTERFEJSY, ITP

Podstawy programowania obiektowego

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Wykład 4: Klasy i Metody

Programowanie obiektowe

Dziedziczenie. Tomasz Borzyszkowski

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Podstawy Programowania Obiektowego

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Wstęp. Ale po co? Implementacja

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Wzorce projektowe. dr Jarosław Skaruz

Aplikacje RMI Lab4

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Oracle PL/SQL. Paweł Rajba.

Transkrypt:

1/8 Singleton Cel: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej. Przykład: Niekiedy ważne jest, aby tworzyć tylko jedną instancję jakiejś klasy. Globalne zmienne zapewnią dostęp do obiektu, ale nie zapewnią, że będzie to jedyna instancja klasy. Lepiej niech sama klasa pilnuje tworzenia swoich instancji i daje do nich dostęp. Zastosowanie: Gdy musi istnieć dokładnie jedna instancja klasy i musi być ona łatwo dostępna dla klientów. Gdy jedyna instancja powinna być rozszerzalna przez dziedziczenie i klienci powinni mieć możliwość jej używania bez modyfikacji swego kodu.

Struktura: private static final Singleton instance = new Singleton(); public static Singleton getinstance() { return instance; //... 2/8

Składniki: Singleton definiuje operację Instance, która daje klientom dostęp do jej jedynej instancji (operacja klasowa, czyli statyczna metoda) może być odpowiedzialny za stworzenie swej jedynej instancji Zależności: Klienci mają dostęp do instancji Singletona jedynie przez jego operację getinstance. Konsekwencje: 1. kontrolowany dostęp do jedynej instancji (ponieważ klasa Singleton zamyka w sobie jedyną instancję, może ona ściśle kontrolować to jak i kiedy klienci do niej sięgają) 2. ograniczenie przestrzeni nazw (ulepszenie względem zmiennych globalnych, zapobiega zaśmiecaniu przestrzeni nazw globalnymi zmiennymi, które miałyby przechowywać jedyną instancję) 3. pozwala na modyfikację operacji i reprezentacji (możemy dziedziczyć z klasy Singletona i udostępnić aplikacji instancję tej rozszerzonej klasy, nawet w czasie wykonania programu) 3/8

4/8 4. pozwala na zmienną liczbę instancji (możemy kontrolować liczbę instancji klasy zmieniając jedynie metodę getinstance) 5. bardziej elastyczne od operacji klasowych (metody statyczne nie pozwalają na dziedziczenie czy zmianę liczby instancji) Implementacja 1. Zapewnienie jedynej instancji: konstruktory niedostępne dla klienta. 2. Dostęp do instancji dzięki metodom statycznym. 3. Późna inicjalizacja (zwłaszcza, gdy do jego stworzenia potrzebne dodatkowe informacje): private static final Singleton instance = null; public static Singleton getinstance() { if (instance == null) instance = new Singleton(); return instance; //...

5/8 4....inne rozwiązanie późnej inicjalizacji: private static class SingletonHolder { static final Singleton INSTANCE = new Singleton(); public static Singleton getinstance() { return SingletonHolder.INSTANCE;

6/8 5. W środowisku wielowątkowym problem wyścigu i niezamierzonego stworzenia kilku obiektów, rozwiązanie: private volatile static Singleton singleton; public static synchronized Singleton getinstance() { if(instance==null) { instance = new Singleton(); return instance;

7/8 6. inne, lepsze rozwiązanie: private volatile static Singleton instance; public static Singleton getinstance() { if(instance==null) { synchronized(singleton.class){ if(instance == null) { instance = new Singleton(); return singleton; 7. Dziedziczenie z klasy Singletona zmienna przechowująca instancję klasy Singletona powinna zostać zainicjalizowana instancją jego klasy pochodnej.

8/8 Powiązania: Wiele innych wzorców projektowych może zostać zaimplementowanych z użyciem Singletona Abstract Factory, Builder, Prototype.