Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб |
Напишите класс, реализующий шаблон проектирования Singleton.
public class Singleton
{
public static Singleton getInstance() { ... }
public int usage() { ... }
}
Метод getInstance
должен возвращать экземпляр класса.
Метод usage
должен возвращать количество вызовов метода getInstance
.
Код решения должен содержать только класс Singleton
с реализацией функций getInstance
и usage
. Он не должен ничего выводить.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб |
Напишите класс, реализующий шаблон проектирования Builder, который строит целое число путём применения арифметических операций.
public class Builder
{
public Builder(int x) { ... }
public Builder add(int x) { ... }
public Builder sub(int x) { ... }
public Builder mul(int x) { ... }
public Integer build() { ... }
}
Конструктор должен инициализировать текущее значение числа.
Методы add
, sub
и mul
должны соответственно
прибавлять, вычитать и домножать
текущее значение на x
и возвращать экземпляр класса.
Метод build
должен возвращать текущее значение.
Код решения должен содержать только класс Builder
. Он не должен ничего выводить.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб |
Дан интерфейс MySet
, реализующий множество целых чисел:
public interface MySet
{
public void add(int x);
public void remove(int x);
public boolean contains(int x);
}
Напишите класс, реализующий шаблон проектирования Proxy.
который позволяет добавлять элементы во множество, а также удалять только те элементы,
которых не было во множестве на момент создания экземпляра Proxy
.
public class Proxy implements MySet
{
public Proxy(MySet init) { ... }
...
}
При попытке удалить несуществующий элемент или элемент, который присутствовал в момент создания класса, ничего не должно происходить.
Код решения должен содержать только класс Proxy
. Он не должен ничего выводить.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб |
Дан интерфейс StringTransformer
, описывающий преобразование строки:
public interface StringTransformer
{
public String apply(String s);
}
Напишите класс Decorator
, содержащий классы Left
и Right
,
реализующие шаблон проектирования Decorator.
Результатом применения декоратора Left
должно быть преобразование,
добавляющее указанный префикс в начало строки.
Результатом применения декоратора Right
должно быть преобразование,
добавляющее указанный суффикс в конец строки.
public class Decorator
{
public static class Left implements StringTransformer {
public Left(String prefix, StringTransformer orig) { ... }
...
}
public static class Right implements StringTransformer {
public Right(String suffix, StringTransformer orig) { ... }
...
}
}
Код решения должен содержать только класс Decorator
. Он не должен ничего выводить.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб |
Дан интерфейс ChainLink
, описывающий элемент цепочки ответственности:
public interface ChainLink {
void setNextChain(ChainLink next);
void apply(int x);
}
Напишите класс Chain
, содержащий классы Fizz
и Buzz
,
реализующие шаблон проектирования Chain of Responsibility.
Результатом применения класса Fizz
должен быть вывод в указанный PrintStream
строки Fizz
, если переданное число делится на 3.
Результатом применения класса Buzz
должен быть вывод в указанный PrintStream
строки Buzz
, если переданное число делится на 5.
public class Chain
{
public class Fizz implements ChainLink {
public Fizz(PrintStream ps) { ... }
...
}
public class Buzz implements ChainLink {
public Buzz(PrintStream ps) { ... }
...
}
}
Код решения должен содержать только класс Chain
. Он не должен ничего выводить.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб |
Дан интерфейс Subscriber
, описывающий подписку на событие:
public interface Subscriber {
void notified(int topic, String message);
}
Напишите класс Notifier
, реализующий шаблон проектирования Observer.
public class Notifier
{
public void register(int topic, Subscriber s) { ... }
public void unregister(int topic, Subscriber s) { ... }
public void notify(int topic, String message) { ... }
}
Функция register
должна подписывать обработчик на события определённой темы.
Функция unregister
должна отменять подписку обработчика на события определённой темы.
Функция notify
должна вызывать функции notified
у всех обработчиков указанной
темы в порядке, соответствующем порядку подписки.
Повторная подписка того же самого обработчика на одну и ту же тему должна перемещать его в конец очереди, определяющей порядок обработки. Отписка не подписанного обработчика должна ничего не делать.
Код решения должен содержать только класс Notifier
. Он не должен ничего выводить.