iOS设计模式解析(四) —— 抽象工厂模式

供一系列创建相关或相互依赖的接口,而无需指定他们具体的类。--《设计模式》

开发过程中都经常会碰到这么一种情况,我需要系列的不同类型的组件,例如有一堆轮胎、一堆发动机;轮胎有汽车和摩托车两种类型,发动机也是汽车和摩托两种类型。这时候我们可以用两个工厂类进行封装,但是当我们引入卡车的轮胎和发动机的时候,两个工厂都得修改。那么,这个时候,抽象工厂类型就更能适应变化和进行类型归类了。
    抽象模式跟工厂模式的主要区别,抽象工厂模式主要是工厂层面也是抽象的,同一个例如汽车工厂、卡车工厂;而工厂模式主要提供单一的产品,例如轮胎专业厂商。

     假设我们现在有两个工厂——汽车和卡车工厂,每个工厂都生产轮胎和发动机。那么抽象如下:


有两个实例工厂,每个工厂都能生产对应的Tyre(轮胎)和Engine(发动机),相关代码如下:
Tyre类型 
// Tyre.swift
protocol ITyre {
    func description() -> String;
}

// CarTyre.swift
class CarTyre : ITyre {
    func description() -> String {
        return "this is a CarTyre...";
    }
}

// TruckTyre.swift
class CarTyre : ITyre {
    func description() -> String {
        return "this is a CarTyre...";
    }
}

Engine类型

// IEngine.swift
protocol IEngine {
    func description()->String;
}

// CarEngine.swift
class CarEngine : IEngine {
    func description() -> String {
        return "this is a carEngine...";
    }
}

// TruckEngine.swift
class TruckEngine : IEngine {
    func description() -> String {
        return "this is a truckEngine...";
    }
}

工厂类型:

// IvehicleFactory.swift
protocol IVehicleFactory {
    func createTyre() -> ITyre ;
    func createEngine() -> IEngine;
}

// CarFactory.swift
class CarFactory : IVehicleFactory {
    func createTyre() -> ITyre {
        return CarTyre();
    }

    func createEngine() -> IEngine {
        return CarEngine();
    }
}

// TruckFactory.swift
class TruckFactory : IVehicleFactory {
    func createTyre() -> ITyre {
        return TruckTyre();
    }

    func createEngine() -> IEngine {
        return TruckEngine();
    }
}

// main.swift
func descriptionComponent(factory : IVehicleFactory) {
    println(factory.createTyre().description());
    println(factory.createEngine().description());
}

var carFactory : IVehicleFactory = CarFactory();

descriptionComponent(carFactory);

descriptionComponent(TruckFactory());
打印结果如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值