swift - Abstract Factory Pattern

前端之家收集整理的这篇文章主要介绍了swift - Abstract Factory Pattern前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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)");

}

}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class CarFactory {

required init() {

// do nothing

}

func createFloorplan() -> Floorplan {

fatalError("Not implemented");

}

func createSuspension() -> Suspension {

fatalError("Not implemented");

}

func createDrivetrain() -> Drivetrain {

fatalError("Not implemented");

}

final class func getFactory(car:Cars) -> CarFactory? {

var factoryType:CarFactory.Type;

switch (car) {

case .COMPACT:

factoryType = CompactCarFactory.self;

case .SPORTS:

factoryType = SportsCarFactory.self;

case .SUV:

factoryType = SUVCarFactory.self;

}

var factory = factoryType.sharedInstance;

if (factory == nil) {

factory = factoryType();

}

return factory;

}

class var sharedInstance:CarFactory? {

get {

return nil;

}

}

}



class CompactCarFactory : CarFactory {

override func createFloorplan() -> Floorplan {

return StandardFloorplan();

}

override func createSuspension() -> Suspension {

return RoadSuspension.getInstance();

}

override func createDrivetrain() -> Drivetrain {

return FrontWheelDrive();

}

}



//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


protocol Floorplan {

var seats:Int { get }

var enginePosition:EngineOption { get };

}


enum EngineOption : String {

case FRONT = "Front"; case MID = "Mid";

}


class ShortFloorplan: Floorplan {

var seats = 2;

var enginePosition = EngineOption.MID

}

猜你在找的Swift相关文章