您的位置:首页 > 其它

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. 运行结果

阳学生做作业!
王老师审批作业!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: