---
title: Примеры шаблонов проектирования
seo:
  title: Примеры шаблонов проектирования — Java Developer
  description: Тема «Примеры шаблонов проектирования» для собеседования Java Developer. Приведите примеры основных шаблонов проектирования. Приведите примеры порождающих шаблонов проектирования.
---

[Все темы Java Developer](/java-developer)

## <strong>Приведите примеры основных шаблонов проектирования</strong> [#q-14bee738d69b812cbaadf5640a890f31]

Примеры основных шаблонов проектирования на Java&#58;

1. <strong>Singleton</strong>&#58;

   ```java
   public class Singleton {
       private static Singleton instance;

       private Singleton() {}

       public static synchronized Singleton getInstance() {
           if (instance == null) {
               instance = new Singleton();
           }
           return instance;
       }
   }
   ```

1. <strong>Factory Method</strong>&#58;

   ```java
   public interface Product {
       void use();
   }

   public class ConcreteProduct implements Product {
       public void use() {
           System.out.println("Using ConcreteProduct");
       }
   }

   public abstract class Creator {
       public abstract Product factoryMethod();

       public void someOperation() {
           Product product = factoryMethod();
           product.use();
       }
   }

   public class ConcreteCreator extends Creator {
       public Product factoryMethod() {
           return new ConcreteProduct();
       }
   }
   ```

1. <strong>Abstract Factory</strong>&#58;

   ```java
   public interface GUIFactory {
       Button createButton();
       Checkbox createCheckbox();
   }

   public class WinFactory implements GUIFactory {
       public Button createButton() {
           return new WinButton();
       }
       public Checkbox createCheckbox() {
           return new WinCheckbox();
       }
   }

   public class MacFactory implements GUIFactory {
       public Button createButton() {
           return new MacButton();
       }
       public Checkbox createCheckbox() {
           return new MacCheckbox();
       }
   }
   ```

:::note[Ссылки для изучения]

1. [Паттерны проектирования в Java](https://javarush.com/groups/posts/2267-patternih-proektirovanija-v-java)
   :::

---

## <strong>Приведите примеры порождающих шаблонов проектирования</strong> [#q-14bee738d69b816c8403c713bdbdd20a]

Примеры порождающих шаблонов проектирования на Java&#58;

1. <strong>Singleton</strong>&#58;

   ```java
   public class Singleton {
       private static Singleton instance;

       private Singleton() {}

       public static synchronized Singleton getInstance() {
           if (instance == null) {
               instance = new Singleton();
           }
           return instance;
       }
   }
   ```

1. <strong>Factory Method</strong>&#58;

   ```java
   public interface Product {
       void use();
   }

   public class ConcreteProduct implements Product {
       public void use() {
           System.out.println("Using ConcreteProduct");
       }
   }

   public abstract class Creator {
       public abstract Product factoryMethod();

       public void someOperation() {
           Product product = factoryMethod();
           product.use();
       }
   }

   public class ConcreteCreator extends Creator {
       public Product factoryMethod() {
           return new ConcreteProduct();
       }
   }
   ```

1. <strong>Abstract Factory</strong>&#58;

   ```java
   public interface GUIFactory {
       Button createButton();
       Checkbox createCheckbox();
   }

   public class WinFactory implements GUIFactory {
       public Button createButton() {
           return new WinButton();
       }
       public Checkbox createCheckbox() {
           return new WinCheckbox();
       }
   }

   public class MacFactory implements GUIFactory {
       public Button createButton() {
           return new MacButton();
       }
       public Checkbox createCheckbox() {
           return new MacCheckbox();
       }
   }
   ```

1. <strong>Builder</strong>&#58;

   ```java
   public class Product {
       private String part1;
       private String part2;

       public void setPart1(String part1) {
           this.part1 = part1;
       }

       public void setPart2(String part2) {
           this.part2 = part2;
       }
   }

   public abstract class Builder {
       protected Product product = new Product();

       public abstract void buildPart1();
       public abstract void buildPart2();

       public Product getResult() {
           return product;
       }
   }

   public class ConcreteBuilder extends Builder {
       public void buildPart1() {
           product.setPart1("Part 1");
       }

       public void buildPart2() {
           product.setPart2("Part 2");
       }
   }

   public class Director {
       public void construct(Builder builder) {
           builder.buildPart1();
           builder.buildPart2();
       }
   }
   ```

1. <strong>Prototype</strong>&#58;

   ```java
   public abstract class Prototype implements Cloneable {
       public Prototype clone() throws CloneNotSupportedException {
           return (Prototype) super.clone();
       }
   }

   public class ConcretePrototype extends Prototype {
       private String field;

       public void setField(String field) {
           this.field = field;
       }

       public String getField() {
           return field;
       }
   }
   ```

:::note[Ссылки для изучения]

1. [Паттерны проектирования в Java](https://javarush.com/groups/posts/2267-patternih-proektirovanija-v-java)
   :::

---

## <strong>Приведите примеры структурных шаблонов проектирования</strong> [#q-14bee738d69b818caabff809bda1e7f9]

Примеры структурных шаблонов проектирования на Java&#58;

1. <strong>Adapter</strong>&#58;

   ```java
   public interface Target {
       void request();
   }

   public class Adaptee {
       public void specificRequest() {
           System.out.println("Specific request");
       }
   }

   public class Adapter implements Target {
       private Adaptee adaptee;

       public Adapter(Adaptee adaptee) {
           this.adaptee = adaptee;
       }

       public void request() {
           adaptee.specificRequest();
       }
   }
   ```

1. <strong>Composite</strong>&#58;

   ```java
   public interface Component {
       void operation();
   }

   public class Leaf implements Component {
       public void operation() {
           System.out.println("Leaf operation");
       }
   }

   public class Composite implements Component {
       private List<Component> children = new ArrayList<>();

       public void add(Component component) {
           children.add(component);
       }

       public void remove(Component component) {
           children.remove(component);
       }

       public void operation() {
           for (Component child : children) {
               child.operation();
           }
       }
   }
   ```

1. <strong>Decorator</strong>&#58;

   ```java
   public interface Component {
       void operation();
   }

   public class ConcreteComponent implements Component {
       public void operation() {
           System.out.println("ConcreteComponent operation");
       }
   }

   public class Decorator implements Component {
       protected Component component;

       public Decorator(Component component) {
           this.component = component;
       }

       public void operation() {
           component.operation();
       }
   }

   public class ConcreteDecorator extends Decorator {
       public ConcreteDecorator(Component component) {
           super(component);
       }

       public void operation() {
           super.operation();
           additionalOperation();
       }

       private void additionalOperation() {
           System.out.println("ConcreteDecorator additional operation");
       }
   }
   ```

1. <strong>Facade</strong>&#58;

   ```java
   public class Subsystem1 {
       public void operation1() {
           System.out.println("Subsystem1 operation1");
       }
   }

   public class Subsystem2 {
       public void operation2() {
           System.out.println("Subsystem2 operation2");
       }
   }

   public class Facade {
       private Subsystem1 subsystem1 = new Subsystem1();
       private Subsystem2 subsystem2 = new Subsystem2();

       public void operation() {
           subsystem1.operation1();
           subsystem2.operation2();
       }
   }
   ```

1. <strong>Proxy</strong>&#58;

   ```java
   public interface Subject {
       void request();
   }

   public class RealSubject implements Subject {
       public void request() {
           System.out.println("RealSubject request");
       }
   }

   public class Proxy implements Subject {
       private RealSubject realSubject;

       public void request() {
           if (realSubject == null) {
               realSubject = new RealSubject();
           }
           realSubject.request();
       }
   }
   ```

:::note[Ссылки для изучения]

1. [Паттерны проектирования в Java](https://javarush.com/groups/posts/2267-patternih-proektirovanija-v-java)
   :::

---

## <strong>Приведите примеры поведенческих шаблонов проектирования</strong> [#q-14bee738d69b81429045e8702086e82e]

Примеры поведенческих шаблонов проектирования на Java&#58;

1. <strong>Observer</strong>&#58;

   ```java
   public interface Observer {
       void update(String state);
   }

   public class ConcreteObserver implements Observer {
       private String state;

       public void update(String state) {
           this.state = state;
           System.out.println("State updated to: " + state);
       }
   }

   public class Subject {
       private List<Observer> observers = new ArrayList<>();
       private String state;

       public void attach(Observer observer) {
           observers.add(observer);
       }

       public void detach(Observer observer) {
           observers.remove(observer);
       }

       public void notifyObservers() {
           for (Observer observer : observers) {
               observer.update(state);
           }
       }

       public void setState(String state) {
           this.state = state;
           notifyObservers();
       }
   }
   ```

1. <strong>Strategy</strong>&#58;

   ```java
   public interface Strategy {
       void execute();
   }

   public class ConcreteStrategyA implements Strategy {
       public void execute() {
           System.out.println("Executing strategy A");
       }
   }

   public class ConcreteStrategyB implements Strategy {
       public void execute() {
           System.out.println("Executing strategy B");
       }
   }

   public class Context {
       private Strategy strategy;

       public void setStrategy(Strategy strategy) {
           this.strategy = strategy;
       }

       public void executeStrategy() {
           strategy.execute();
       }
   }
   ```

1. <strong>Command</strong>&#58;

   ```java
   public interface Command {
       void execute();
   }

   public class ConcreteCommand implements Command {
       private Receiver receiver;

       public ConcreteCommand(Receiver receiver) {
           this.receiver = receiver;
       }

       public void execute() {
           receiver.action();
       }
   }

   public class Receiver {
       public void action() {
           System.out.println("Receiver action");
       }
   }

   public class Invoker {
       private Command command;

       public void setCommand(Command command) {
           this.command = command;
       }

       public void executeCommand() {
           command.execute();
       }
   }
   ```

1. <strong>Iterator</strong>&#58;

   ```java
   public interface Iterator {
       boolean hasNext();
       Object next();
   }

   public class ConcreteIterator implements Iterator {
       private List<Object> items;
       private int position = 0;

       public ConcreteIterator(List<Object> items) {
           this.items = items;
       }

       public boolean hasNext() {
           return position < items.size();
       }

       public Object next() {
           return items.get(position++);
       }
   }

   public interface Aggregate {
       Iterator createIterator();
   }

   public class ConcreteAggregate implements Aggregate {
       private List<Object> items = new ArrayList<>();

       public void addItem(Object item) {
           items.add(item);
       }

       public Iterator createIterator() {
           return new ConcreteIterator(items);
       }
   }
   ```

1. <strong>State</strong>&#58;

   ```java
   public interface State {
       void handle();
   }

   public class ConcreteStateA implements State {
       public void handle() {
           System.out.println("Handling state A");
       }
   }

   public class ConcreteStateB implements State {
       public void handle() {
           System.out.println("Handling state B");
       }
   }

   public class Context {
       private State state;

       public void setState(State state) {
           this.state = state;
       }

       public void request() {
           state.handle();
       }
   }
   ```

:::note[Ссылки для изучения]

1. [Паттерны проектирования в Java](https://javarush.com/groups/posts/2267-patternih-proektirovanija-v-java)
   :::
