При разработке программного обеспечения шаблоны проектирования обеспечивают проверенные решения распространенных проблем программирования. Два популярных шаблона проектирования, Factory и Builder, широко используются для создания гибких и удобных в сопровождении объектов. В этой статье мы рассмотрим, когда и как эффективно использовать эти шаблоны. Мы обсудим различные варианты использования и приведем примеры кода, иллюстрирующие их реализацию.
- Шаблон проектирования «Фабрика».
Шаблон проектирования «Фабрика» используется, когда мы хотим создавать объекты, не подвергая логику создания экземпляров непосредственно клиентскому коду. Он обеспечивает централизованную точку создания экземпляров и позволяет легко расширять и поддерживать код.
Пример.
Давайте рассмотрим сценарий, в котором у нас есть разные типы транспортных средств, например автомобили, мотоциклы и велосипеды. Мы можем использовать шаблон Factory для создания этих транспортных средств на основе запрошенного типа.
public interface Vehicle {
void drive();
}
public class Car implements Vehicle {
@Override
public void drive() {
System.out.println("Driving a car...");
}
}
public class Motorcycle implements Vehicle {
@Override
public void drive() {
System.out.println("Riding a motorcycle...");
}
}
public class Bicycle implements Vehicle {
@Override
public void drive() {
System.out.println("Riding a bicycle...");
}
}
public class VehicleFactory {
public Vehicle createVehicle(String type) {
if (type.equalsIgnoreCase("car"))
return new Car();
else if (type.equalsIgnoreCase("motorcycle"))
return new Motorcycle();
else if (type.equalsIgnoreCase("bicycle"))
return new Bicycle();
return null;
}
}
public class Main {
public static void main(String[] args) {
VehicleFactory factory = new VehicleFactory();
Vehicle car = factory.createVehicle("car");
car.drive(); // Output: Driving a car...
Vehicle motorcycle = factory.createVehicle("motorcycle");
motorcycle.drive(); // Output: Riding a motorcycle...
Vehicle bicycle = factory.createVehicle("bicycle");
bicycle.drive(); // Output: Riding a bicycle...
}
}
В приведенном выше примере VehicleFactoryдействует как фабричный класс, инкапсулирующий логику создания. Клиентский код запрашивает у завода конкретный тип транспортного средства, который возвращает соответствующий объект.
- Шаблон проектирования Builder.
Шаблон проектирования Builder используется, когда нам нужно шаг за шагом создавать сложные объекты, обеспечивая четкое разделение между построением и представлением. Это особенно полезно при работе с объектами со множеством необязательных параметров.
Пример.
Рассмотрим сценарий, в котором мы хотим создать объект Userс различными дополнительными атрибутами, такими как имя, возраст, адрес электронной почты и адрес. Шаблон Builder позволяет нам создавать объект Userв удобной и читаемой форме.
public class User {
private String name;
private int age;
private String email;
private String address;
private User(UserBuilder builder) {
this.name = builder.name;
this.age = builder.age;
this.email = builder.email;
this.address = builder.address;
}
// Getters for User attributes
// Builder class
public static class UserBuilder {
private String name;
private int age;
private String email;
private String address;
public UserBuilder(String name) {
this.name = name;
}
public UserBuilder age(int age) {
this.age = age;
return this;
}
public UserBuilder email(String email) {
this.email = email;
return this;
}
public UserBuilder address(String address) {
this.address = address;
return this;
}
public User build() {
return new User(this);
}
}
}
public class Main {
public static void main(String[] args) {
User user = new User.UserBuilder("John")
.age(25)
.email("john@example.com")
.address("123 Main St")
.build();
// Accessing user attributes
System.out.println("Name: " + user.getName());
System.out.println("Age: " + user.getAge());
System.out.println("Email: " + user.getEmail());
System.out.println("Address: " + user.getAddress());
}
}
В приведенном выше примере класс Userимеет вложенный класс UserBuilder, который предоставляет методы для установки необязательных атрибутов. Метод build()создает объект Userна основе предоставленных значений.
Шаблоны проектирования Factory и Builder — мощные инструменты разработки программного обеспечения. Шаблон Factory позволяет централизованно создавать объекты, а шаблон Builder облегчает создание сложных объектов со многими дополнительными параметрами. Понимая соответствующие варианты использования и эффективно реализуя эти шаблоны, разработчики могут создавать код, который будет более удобным в сопровождении, расширяемым и читабельным.