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

}

时间: 2024-09-30 06:54:51

swift - Abstract Factory Pattern的相关文章

二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式(Abstract Factory Pattern) 介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例有Message和MessageModel,Message有一个Insert()方法,该方法的参数是MessageModel. AbstractMessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Abstract

设计模式 - 抽象工厂模式(abstract factory pattern) 详解

抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27091671 参考工厂模式: http://blog.csdn.net/caroline_wendy/article/details/27081511 抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要明确指定具体类. 全部代码: http://download.csdn.net/de

设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释

抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27091671 參考工厂模式: http://blog.csdn.net/caroline_wendy/article/details/27081511 抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不须要明白指定详细类. 所有代码: http://download.csdn.net/

抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式:抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.                          这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.                          在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类.每个生成的工厂都能按照工厂模式提供对象. 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的

【设计模式】 抽象工厂模式 Abstract Factory Pattern

简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式相对于简单工厂和工厂方法模式来着更具抽象性. 一.抽象工厂模式演绎 我们先来看一个简单的需求: 甲方要开发一套办公自动化软件,其中有一个非常重要的功能就是要能够导入Word 文档和Excel 文档. 开发人员拿到需求后就开始编码了,  很快代码写完了: public class ImportTool

24种设计模式--抽象工厂模式【Abstract Factory Pattern】

女娲造人,人是造出来了,世界是热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,忘记给人类定义性别了,那怎么办?抹掉重来,然后就把人类重新洗牌,准备重新开始制造人类. 由于先前的工作已经花费了很大的精力做为铺垫,也不想从头开始了,那先说人类(Product 产品类)怎么改吧,好,有了,给每个人类都加一个性别,然后再重新制造,这个问题解决了,那八卦炉怎么办?只有一个呀,要么生产出全都是男性,要不都是女性,那不行呀,有了,把已经有了一

抽象工厂方法模式(Abstract Factory Pattern)

Provide an interface for creating families of related or dependent objects without specifying their concrete classes.为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 主要解决:主要解决接口选择的问题. 何时使用:系统的产品多于一个的产品族,而系统只消费其中某一族的产品. 如何解决:在一个产品族里面,定义多个产品. 关键代码:在一个工厂里聚合多个同类产品. 应

设计模式-04抽象工厂模式(Abstract Factory Pattern)

1.模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法.但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象. 为了更清晰地理解工厂方法模式,需要先引入两个概念: 产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机.海信电视机.TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌

abstract Factory pattern

1,注意静态工厂(简单工厂模式).工厂方法.抽象工厂的区别 静态工厂是根据客户端传入的参数,使用工厂类来创建相应的产品接口的具体实现子类对象.比如,需要需要创建一个工具类,该工具类是为了调用外部系统,但外部系统的版本有差异,需要根据不同版本的外部系统,生成相应的工具类.这个时候如果外部系统不同版本的数量比较少,此时使用静态工厂是合适的. 注意静态工厂模式只有一个工厂类. 工厂方法是每一个产品都有一个工厂类,存在一个工厂类父类,客户端直接创建具体的工厂类,然后生产相应的产品.工厂方法把简单工厂的内