Builderデザインパターンは、複雑なオブジェクトの作成プロセスを抽象化し、オブジェクトの構築手順を明示的に定義するために使用されます。このパターンでは、オブジェクトの構築手順を表すBuilderクラスがあります。Builderクラスは、オブジェクトの各部分を作成し、最終的なオブジェクトを返すメソッドを提供します。これにより、異なるオブジェクトの構築手順を定義し、同じBuilderクラスを使用して異なるオブジェクトを作成できます。
以下に、Builderパターンの例を示します。
public class Car {
private String brand;
private String model;
private int year;
// プライベートなコンストラクタ
private Car() {}
public String getBrand() {
return brand;
}
public String getModel() {
return model;
}
public int getYear() {
return year;
}
// Builderクラス
public static class Builder {
private Car car;
public Builder() {
car = new Car();
}
public Builder setBrand(String brand) {
car.brand = brand;
return this;
}
public Builder setModel(String model) {
car.model = model;
return this;
}
public Builder setYear(int year) {
car.year = year;
return this;
}
public Car build() {
return car;
}
}
}
// 使用例
Car car = new Car.Builder()
.setBrand("Toyota")
.setModel("Camry")
.setYear(2020)
.build();
以下に、Factoryパターンの例を示します。
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("円を描画します。");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("四角形を描画します。");
}
}
public class ShapeFactory {
public Shape createShape(String shapeType) {
if (shapeType.equalsIgnoreCase("circle")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("rectangle")) {
return new Rectangle();
}
return null;
}
}
// 使用例
ShapeFactory shapeFactory = new ShapeFactory();
Shape circle = shapeFactory.createShape("circle");
circle.draw(); // "円を描画します。" と出力される
Shape rectangle = shapeFactory.createShape("rectangle");
rectangle.draw(); // "四角形を描画します。" と出力される
デザインパターンは、ソフトウェア開発の中で一般的に使用される再利用可能なソリューションの設計手法です。BuilderパターンとFactoryパターンは、オブジェクトの生成に関連して使用される2つのデザインパターンです。
Builderデザインパターンは、複雑なオブジェクトの作成プロセスを抽象化し、オブジェクトの構築手順を明示的に定義するために使用されます。このパターンでは、オブジェクトの構築手順を表すBuilderクラスがあります。Builderクラスは、オブジェクトの各部分を作成し、最終的なオブジェクトを返すメソッドを提供します。これにより、異なるオブジェクトの構築手順を定義し、同じBuilderクラスを使用して異なるオブジェクトを作成できます。
以下に、Builderパターンの例を示します。
public class Car {
private String brand;
private String model;
private int year;
// プライベートなコンストラクタ
private Car() {}
public String getBrand() {
return brand;
}
public String getModel() {
return model;
}
public int getYear() {
return year;
}
// Builderクラス
public static class Builder {
private Car car;
public Builder() {
car = new Car();
}
public Builder setBrand(String brand) {
car.brand = brand;
return this;
}
public Builder setModel(String model) {
car.model = model;
return this;
}
public Builder setYear(int year) {
car.year = year;
return this;
}
public Car build() {
return car;
}
}
}
// 使用例
Car car = new Car.Builder()
.setBrand("Toyota")
.setModel("Camry")
.setYear(2020)
.build();
以下に、Factoryパターンの例を示します。
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("円を描画します。");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("四角形を描画します。");
}
}
public class ShapeFactory {
public Shape createShape(String shapeType) {
if (shapeType.equalsIgnoreCase("circle")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("rectangle")) {
return new Rectangle();
}
return null;
}
}
// 使用例
ShapeFactory shapeFactory = new ShapeFactory();
Shape circle = shapeFactory.createShape("circle");
circle.draw(); // "円を描画します。" と出力される
Shape rectangle = shapeFactory.createShape("rectangle");
rectangle.draw(); // "四角形を描画します。" と出力される
Builderデザイン