Примеры шаблонов проектирования
Приведите примеры основных шаблонов проектирования
Примеры основных шаблонов проектирования на Java:
-
Singleton:
public class Singleton { private static Singleton instance; private Singleton() {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } -
Factory Method:
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(); } } -
Abstract Factory:
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(); } }
Приведите примеры порождающих шаблонов проектирования
Примеры порождающих шаблонов проектирования на Java:
-
Singleton:
public class Singleton { private static Singleton instance; private Singleton() {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } -
Factory Method:
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(); } } -
Abstract Factory:
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(); } } -
Builder:
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(); } } -
Prototype:
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; } }
Приведите примеры структурных шаблонов проектирования
Примеры структурных шаблонов проектирования на Java:
-
Adapter:
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(); } } -
Composite:
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(); } } } -
Decorator:
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"); } } -
Facade:
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(); } } -
Proxy:
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(); } }
Приведите примеры поведенческих шаблонов проектирования
Примеры поведенческих шаблонов проектирования на Java:
-
Observer:
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(); } } -
Strategy:
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(); } } -
Command:
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(); } } -
Iterator:
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); } } -
State:
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(); } }