23设计模式之抽象工厂(Abstract Factory)
2015-11-27 17:00
344 查看
1 概述
抽象工厂(Abstract Factory)属于创建型模式中的一种,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。2 适用性
一个系统要独立于它的产品的创建、组合和表示时。一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时。
当你提供一个产品类库,而只想显示它们的接口而不是实现时。
3 参与者
AbstractFactory:声明一个创建抽象产品对象的操作接口。ConcreteFactory:实现创建具体产品对象的操作。
AbstractProduct:为一类产品对象声明一个接口。
ConcreteProduct:定义一个将被相应的具体工厂创建的产品对象,实现AbstractProduct接口。
Client:仅使用由AbstractFactory和AbstractProduct类声明的接口
4 类图
5 代码实现
import Cocoa /// CatProtocol为一类产品对象声明一个协议。 private protocol CatProtocol { func eat() } /// WhiteCat定义一个将被相应的具体工厂创建的产品对象。实现CatProtocol协议 private class WhiteCat: CatProtocol { func eat() { print("The white cat is eating!") } } /// BlackCat定义一个将被相应的具体工厂创建的产品对象。实现CatProtocol协议 private class BlackCat: CatProtocol { func eat() { print("The black cat is eating!") } } // MARK: - /// DogProtocol为一类产品对象声明一个协议。 private protocol DogProtocol { func eat() } /// WhiteDog定义一个将被相应的具体工厂创建的产品对象。实现DogProtocol协议 private class WhiteDog: DogProtocol { func eat() { print("The white dog is eating!") } } /// BlackDog定义一个将被相应的具体工厂创建的产品对象。实现DogProtocol协议 private class BlackDog: DogProtocol { func eat() { print("The black dog is eating!") } } // MARK: - /// AnimalFactoryProtocol声明一个创建抽象产品对象的操作协议。 private protocol AnimalFactoryProtocol { /// 创建ICat func createCat() -> CatProtocol /// 创建IDog func createDog() -> DogProtocol } /// WhiteAnimalFactory 实现创建具体产品对象的操作。 private class WhiteAnimalFactory: AnimalFactoryProtocol { func createCat() -> CatProtocol { return WhiteCat() } func createDog() -> DogProtocol { return WhiteDog() } } /// BlackAnimalFactory 实现创建具体产品对象的操作。 private class BlackAnimalFactory: AnimalFactoryProtocol { func createCat() -> CatProtocol { return BlackCat() } func createDog() -> DogProtocol { return BlackDog() } }
测试
let blackAnimalFactory = BlackAnimalFactory() let whiteAnimalFactory = WhiteAnimalFactory() var cat = blackAnimalFactory.createCat() cat.eat() cat = whiteAnimalFactory.createCat() cat.eat() var dog = blackAnimalFactory.createDog() dog.eat() dog = whiteAnimalFactory.createDog() dog.eat()
其他
源代码
Framework文档修改记录
时间 | 描述 |
---|---|
2015-11-27 | 博文完成 |
版权所有
CSDN:http://blog.csdn.net/y550918116jGitHub:https://github.com/937447974/Blog
相关文章推荐
- maven
- 为嵌套在左右滑动的UIScrollview上的UITableView增加滑动删除
- J2EE开发技术点6:Proxool数据库连接池
- 利用BIOS INT 0x13读取软盘
- JavaScript 获取dom外联样式
- 23设计模式之策略模式(Strategy)
- H5移动端出生日期插件
- less的实践笔记
- Android动画之translate(位移动画)
- 如何正确选择会计培训班
- 说说std::endl函数
- 我的H3CNE学习之路
- 查询索引碎片
- 协同过滤算法简述
- 查看并释放内存
- Android开发之第一个小项目--我的MP3播放器(一)
- delete、truncate、drop区别
- 灵犀云语法编写指南
- POJ1017——装箱问题
- Linux文件系统的实现