Прокси, Декоратор, Адаптер и Мост являются всеми вариациями на "обертывание" класса. Но их использование отличается.
Прокси мог использоваться, когда Вы хотите к ленивому - инстанцируют объекта или скрывают то, что Вы называете удаленный сервис или управляете доступом к объекту.
Декоратора также называют "Умным Прокси". Это используется, когда Вы хотите добавить функциональность к объекту, но не путем расширения что тип объекта. Это позволяет Вам делать так во времени выполнения.
Адаптер используется, когда у Вас есть абстрактный интерфейс, и Вы хотите отобразить тот интерфейс на другой объект, который имеет подобную функциональную роль, но другой интерфейс.
Мост очень похож на Адаптер, но мы называем его Мостом, когда Вы определяете и абстрактный интерфейс и конкретную реализацию. Т.е. Вы не адаптируетесь к некоторому или стороннему коду прежней версии, Вы - разработчик всего кода, но необходимо смочь выгрузить различные реализации.
Фасад является более высоким уровнем (чтение: более простой), взаимодействуют через интерфейс к подсистеме одного или нескольких классов. Предположим, что у Вас есть сложное понятие, которое требует нескольких объектов представить. Внесение изменений в тот набор объектов сбивает с толку, потому что Вы не всегда знаете, какой объект имеет метод, который необходимо назвать. Это - время для записи Фасада, который предоставляет высокоуровневые методы для всех сложных операций, которые можно сделать к набору объектов. Пример: Модель предметной области для школьного раздела, с методами как countStudents()
, reportAttendance()
, assignSubstituteTeacher()
, и так далее.
SQL-операторы являются атомарными. То есть, если вы выполните что-то вроде этого:
UPDATE Cars SET Sold = Sold + 1
Никто не может изменить переменную Sold
во время этого оператора. Он всегда увеличивается на 1, даже если кто-то другой выполняет одно и то же выражение одновременно.
Проблема возникает, если у вас есть утверждения, которые зависят друг от друга:
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
Между этими запросами другой пользователь может изменить таблицу Cars и обновить Sold. Чтобы предотвратить это, включите его в транзакцию:
BEGIN;
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
COMMIT;
Транзакции поддерживаются InnoDB, но не MyISAM.