patterns Flashcards

1
Q

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

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

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

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Singleton

A
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;
} }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Factory Method

A
делегирует создание объектов наследникам родительского класса
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;
    }
}

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

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

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Prototype

A

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

  public ComplicatedObject copy() {
    return new ComplicatedObject();
  }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Builder

A

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

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(); ///получить обьект   } }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Adapter

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

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

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Facade

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

decorator

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Proxy -

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Strategy -

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

command

A

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

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(); }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly