It allows a calling component to obtain a family or group of related objects without needing to know which classes were used to create them.
每一层的创建都是工厂,并且客户端和中间层是不知道具体零件的类型的。
client:
let car = Car(carType: Cars.SPORTS);
car.printDetails();
design pattern:
enum Cars: String {
case COMPACT = "VW Golf";
case SPORTS = "Porsche Boxter";
case SUV = "Cadillac Escalade";
}
struct Car {
var carType:Cars;
var floor:Floorplan;
var suspension:Suspension;
var drive:Drivetrain;
init(carType:Cars) {
let concreteFactory = CarFactory.getFactory(carType);
self.floor = concreteFactory!.createFloorplan();
self.suspension = concreteFactory!.createSuspension();
self.drive = concreteFactory!.createDrivetrain();
self.carType = carType;
}
func printDetails() {
println("Car type: \(carType.rawValue)");
println("Seats: \(floor.seats)");
println("Engine: \(floor.enginePosition.rawValue)");
println("Suspension: \(suspension.suspensionType.rawValue)");
println("Drive: \(drive.driveType.rawValue)");
}
}
@H_502_269@