23设计模式之工厂方法(FactoryMethod)
2015-09-20 13:49
525 查看
返回首页
一、概述
FactoryMethod属于创建型模式中的一种,定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。二、适用性
1. 当一个类不知道它所必须创建的对象的类的时候。2. 当一个类希望由它的子类来指定它所创建的对象的时候。
3. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
三、参与者
1. Product:定义工厂方法所创建的对象的接口。2. ConcreteProduct:实现Product接口。
3. Creator:声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。可以调用工厂方法以创建一个Product对象。
4. ConcreteCreator:重定义工厂方法以返回一个ConcreteProduct实例。
四、类图
五、代码实现
1.Product:定义工厂方法所创建的对象的接口。
Work.swift// // Work.swift // 23设计模式 // // Created by 阳君 on 14/11/27. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// Work定义工厂方法所创建的对象的接口。 protocol Work { func doWork() }
2. ConcreteProduct:实现Product接口。
a) StudentWork.swift// // StudentWork.swift // 23设计模式 // // Created by 阳君 on 14/11/27. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// StudentWork实现Work接口。 class StudentWork : Work { func doWork() { print("阳学生做作业!") } }
b) TeacherWork.swift
// // TeacherWork.swift // 23设计模式 // // Created by 阳君 on 14/11/27. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// TeacherWork实现Work接口。 class TeacherWork : Work { func doWork() { print("王老师审批作业!") } }
3. Creator:声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。可以调用工厂方法以创建一个Product对象。
IWorkFactory.swift// // IWorkFactory.swift // 23设计模式 // // Created by 阳君 on 14/11/27. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// IWorkFactory 声明工厂方法,该方法返回一个Work类型的对象。IWorkFactory也可以定义一个工厂方法的缺省实现,它返回一个缺省的TeacherWork对象。可以调用工厂方法以创建一个Work对象。 protocol IWorkFactory { func getWork() ->Work }
4. ConcreteCreator:重定义工厂方法以返回一个ConcreteProduct实例。
a) StudentWorkFactory.swift// // StudentWorkFactory.swift // 23设计模式 // // Created by 阳君 on 14/11/27. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// 重定义工厂方法以返回一个TeacherWork实例。 class StudentWorkFactory : IWorkFactory { func getWork() ->Work { return StudentWork() } }
b) TeacherWorkFactory.swift
// // TeacherWorkFactory.swift // 23设计模式 // // Created by 阳君 on 14/11/27. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// 重定义工厂方法以返回一个TeacherWork实例。 class TeacherWorkFactory : IWorkFactory { func getWork() ->Work { return TeacherWork() } }
六、测试
1. 代码
// 工厂方法 let studentWorkFactory:IWorkFactory = StudentWorkFactory() studentWorkFactory.getWork().doWork() let teacherWorkFactory:IWorkFactory = TeacherWorkFactory() teacherWorkFactory.getWork().doWork()
2. 运行结果
阳学生做作业!王老师审批作业!
相关文章推荐
- 使用VS2015编译openssl1.0.1p
- 杭州出租车改革:“破冰”后期待最终破题
- Access, SQL Server, Oracle, MySQL的区别与相似
- OpenCV图像的基础叠加
- ubuntu安装配置jdk1.7
- 读书笔记之《程序员的自我修养——链接、装载与库》
- 基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
- javascript 一次开发,多平台运行
- LeetCode 5 Longest Palindromic Substring(最大回文子字符串)
- SSO单点登录
- Python 类 --基础与要点
- MVC 异步请求
- vim中同时打开多个文件 同时显示多个窗口
- MySQL数据库
- 在PPT2007中制作礼花绽放动画效果ppt模板打包下载
- python获取对象信息type、dir、getattr、setattr
- 二十9天 月出冲击黑鸟 —Spring的AOP_AspectJ @annotation
- 【Andord真】SlideMenu+ViewPagerIndictor双滑动边栏+滑动导航条
- android之模拟手机助手下载
- 使用java语言向oracle数据库中存入、取出图片及文件