Содержание
- 2. Содержание Наследование Пример иерархии Контракты Паттерн Одиночка
- 3. Критерий для оценки качества принимаемых решений при построении иерархий наследования. Впервые этот принцип был упомянут Барбарой
- 4. Проверка абстракции на тип Код проверки абстракции на тип на примере нарушения принципа открытости/закрытости. Класс Repository
- 5. Наследование С наследованием не все так просто. Во-первых, наследование – это одна из самых сильных связей
- 6. ПРИМЕЧАНИЕ Бертран Мейер в своей книге "Объектно-ориентированное конструирование программных систем" (глава 24) приводит 12 (!) различных
- 7. Какую проблему мы пытаемся решить? Основной смысл любой иерархии наследования в том, что она позволяет использовать
- 8. Классический пример: квадраты и прямоугольники Наследование моделирует отношение «ЯВЛЯЕТСЯ» В зависимости от «контракта» сущностей (не важно,
- 9. Квадрат является прямоугольником, но актуально ли это отношение для классов Rectangle и Square
- 10. Код примера class Rectangle { int getHeight() const; void setHeight(int value); int getWidth() const; void setWidth(int
- 11. Пока нельзя сказать, являются ли контракты согласованными. Поскольку у квадрата все стороны равны, то изменение его
- 12. Неизменяемость -immutable Но это не значит, что данная иерархия наследования является невозможной. Квадрат перестает быть нормальным
- 13. Лучше точнее описывать контракт базовых классов Данный пример показывает несколько важных моментов: Во-первых, именно наличие контракта
- 14. Принцип подстановки Лисков и контракты Не будет преувеличением сказать, что лишь с помощью принципов Проектирования по
- 15. LSP – обосновывается контрактами Если посмотреть на исходное описание принципа подстановки в трудах Барбары Лисков, то
- 16. Заключение Принцип подстановки Лисков не является панацеей в вопросах наследования, он лишь помогает формализовать, в каких
- 17. Одиночка Суть паттерна Одиночка — это порождающий паттерн проектирования, который гарантирует, что у класса есть только
- 18. 1. Гарантирует наличие единственного экземпляра класса. Чаще всего это полезно для доступа к какому-то общему ресурсу,
- 19. 2. Предоставляет глобальную точку доступа. Это не просто глобальная переменная, через которую можно достучаться к определённому
- 20. Решение Все реализации одиночки сводятся к тому, чтобы скрыть конструктор по умолчанию и создать публичный статический
- 21. Структура одиночка определяет статический метод getInstance(), который возвращает единственный экземпляр класса Одиночки. Конструктор одиночки должен быть
- 22. Пример В этом примере роль Одиночки играет класс подключения к базе данных. Этот класс не имеет
- 23. class Database private Object instance: Database static method getInstance() if (this.instance == null) then acquireThreadLock() //
- 24. class Application method main() Database foo = Database.getInstance() foo.query("SELECT ...") // ... Database bar = Database.getInstance()
- 25. Шаги реализации Добавьте в класс приватное статическое поле, которое будет содержать одиночный объект. Объявите статический создающий
- 26. Преимущества и недостатки (+) Гарантирует наличие единственного экземпляра класса. Предоставляет к нему глобальную точку доступа. Реализует
- 27. Одиночке нашлось применение в стандартных библиотеках Java: java.lang.Runtime#getRuntime() java.awt.Desktop#getDesktop() java.lang.System#getSecurityManager() Признаки применения паттерна: Одиночку можно определить
- 28. Singleton.java: Одиночка public final class Singleton { private static Singleton instance; public String value; private Singleton(String
- 29. DemoSingleThread.java: Клиентский код public class DemoSingleThread { public static void main(String[] args) { System.out.println("If you see
- 30. OutputDemoSingleThread.txt: Результаты выполнения If you see the same value, then singleton was reused (yay!) If you
- 32. Скачать презентацию