patterns Flashcards Preview

Java > patterns > Flashcards

Flashcards in patterns Deck (13)
Loading flashcards...
1

Паттерны проектирования в Java

это описание проблем, которые встречаются при написании объектно-ориентированного кода, а так же примеры решения этих проблем.

2

Паттерны создания объектов

Singleton - обеспечиваем существование в системе ровно одного экземпляра некоторого класса;
Factory Method - делегируем процесс создания объектов классам-наследникам;
Prototype - клонируем объекты на основании некоторого базового объекта;
Builder - отделяем процесс создания комплексного объекта от его представления;
Abstract Factory - описываем сущность для создания целых семейств взаимосвязанных объектов.

3

Singleton

public final class Singleton {
private static Singleton _instance = null;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (_instance == null)
_instance = new Singleton();
return _instance;
}
}

С двойной проверкой:
public final class Singleton {
private static volatile Singleton _instance = null;

private Singleton() {}

public static synchronized Singleton getInstance() {
if (_instance == null)
synchronized (Singleton.class) {
if (_instance == null)
_instance = new Singleton();
}
return _instance;
}
}

с ленивой инициализацией:
public final class Singleton {
private Singleton() {}

private static class Holder {
private static final Singleton _instance = new Singleton();
}

public static Singleton getInstance() {
return Holder._instance;
}
}

4

Factory Method

делегирует создание объектов наследникам родительского класса
public abstract class AbstractWriter {
public abstract void write(Object context);
}
public class ConcreteFileWriter extends AbstractWriter {
public void write (Object context) {
// method body
}
}

public class ConcreteXmlWriter extends AbstractWriter {
public void write (Object context) {
// method body
}
}

public class FactoryMethod {
public AbstractWriter getWriter(Object object) {
AbstractWriter writer = null;
if (object instanceof File) {
writer = new ConcreteFileWriter();
} else if (object instanceof Document) {
writer = new ConcreteXmlWriter();
}
return writer;
}
}

Простая фабрика ///возвращает обьект по типу и все

Фабричный метод////добавление к фабрике интерфейса, в котором можно описать функциональные методы

абстрактная метод Через интерфейс вызывается
фабрика которая через интерфейс
создаёт объекты и наследует

5

Prototype

позволяет создавать новые объекты на основе некоторого объекта-прототипа при этом совсем не обязательно знать как необходимый объект устроен.
public class ComplicatedObject implements Copyable {
public enum Type {
ONE, TWO
}

public ComplicatedObject copy() {
return new ComplicatedObject();
}

6

Builder

фактори завернут в фактори

class BuilderExample {
public static void main(String[] args) {
Director director = new Director();
ComputerBuilder cheapComputerBuilder = new CheapComputerBuilder();

director.setComputerBuilder(cheapComputerBuilder);///закинуть детали в обьект
director.constructComputer();///собрать из деталей обьект

Computer computer = director.getComputer(); ///получить обьект
}
}

7

Adapter

в разных ситуациях - работают разные интрефейсы...If else спрятать в
отдельный класс с входными данными

8

Разница между Адаптером и Фасадом

. Facade определяет новый интерфейс, в то время как Адаптер использует существующие интерфейсы.

9

Facade

является неким интерфейсом, сочетающим в себе только необходимую функциональность в удобном для пользователя виде.Так можно скрыть реализацию сложных частей кода, уменьшить количество зависимостей от внешней библиотеки и, наконец, работать со множеством объектов через прозрачный и удобный интерфейс. Это, в свою очередь, гарантирует более качественную и простую поддержку всей систем

10

decorator

В классе-декораторе описывается схожее
поведение в разных методах...а исполняющий
класс в разных ситуациях просто вызывает
методами это поведение(пример - когда какого цвета кнопка). динамически добавляем новую функциональность некоторому объекту, сохраняя его интерфейс;

11

Proxy -

создаем объект, который перехватывает вызовы к другому объекту;

12

Strategy -

в разных ситуациях - разное
поведение...If else спрятать в
отдельный класс с входными данными

13

command

Заворачивает запрос в новый обьект наполняя функционалом...например команда ввода текста завернутая в обьект с функцией отмены, который можно куда то передать

public abstract class Command {
public Editor editor;
private String backup;

Command(Editor editor) {
this.editor = editor;
}

void backup() {
backup = editor.textField.getText();
}

public void undo() {
editor.textField.setText(backup);
}

public abstract boolean execute();
}