23设计模式之工厂方法(FactoryMethod)

返回首页



一、概述

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

阳学生做作业!

王老师审批作业!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值