Swift设计模式:2.工厂方法模式

工厂方法模式(Factory Method Pattern)

一.什么是工厂方法模式:

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
它一般包含一个“工厂”对象来生产一系列的产品。这个“工厂”生产的对象都是有关联的----或者有相同的父类,或者实现相同的protocol。

二.工厂方法模式的优点:

1.良好的封装性,代码结构清晰
2.扩展性非常优秀
3.屏蔽产品类
4.降低耦合性

三.工厂模式的使用场景:

1.在所有需要生成对象的地方都可以使用,但是需要慎重地考虑是否需要增加一个工厂类进行管理,增加代码的复杂度。

2.需要灵活的,可扩展的框架时,可以考虑采用工厂方法模式。例如需要设计一个连接邮件服务器的框架,有三种网络协议可供选择:POP3,IMAP,HTTP。我们就可以把这三种连接方法作为产品类,然后定义一个工厂方法,按照不同的传入条件,选择不同的连接方式。

3.工厂方法可以用在异构项目中。

4.可以使用在测试驱动开发的框架下。

四.Swift实现工厂方法模式:

世界上有三种肤色的人:白人,黑人,黄人。这三种人都有一个共同的属性:人。它们有一个共同的父类。在有些时候,我们可能需要根据不同情况来创建三种肤色人的对象。这个时候我们就可以创建一个工厂类来创建对象:

首先,我们先定义好“人”类:

class People {
    func printColor(){
        
    }
}

class WhitePeople: People {
    override func printColor() {
        print("White Color")
    }
}

class YellowPeople: People {
    override func printColor() {
        print("Yellow Color")
    }
}

class BlackPeople: People {
    override func printColor() {
        print("Black Color")
    }
}

然后,我们定义一个工厂类:

enum PeopleColor {
    case white
    case yellow
    case black
}

class CreatePeopleFactory {
    static func productPeople(for color: PeopleColor) -> People{
        switch color {
        case .white:
            return WhitePeople()
        case .yellow:
            return YellowPeople()
        case .black:
            return BlackPeople()
        }
    }
}

现在,我们便可以使用工厂方法根据需要创建出不同的人了:

let people = CreatePeopleFactory.productPeople(for: .white)
        people.printColor()

demo地址:Factory Method Pattern

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 4,003评论 1 15
  • 简单工厂模式虽然简单,但存在一个很严重的问题。当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建...
    justCode_阅读 1,231评论 1 9
  • 今天学习下最常见的工厂模式,工厂模式细分下来有三大类: 他们的目标都是一样的:封装对象的创建。但是实现手段和使用场...
    西木柚子阅读 2,183评论 7 28
  • 1 场景问题# 1.1 导出数据的应用框架## 考虑这样一个实际应用:实现一个导出数据的应用框架,来让客户选择数据...
    七寸知架构阅读 6,892评论 6 75
  • 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...
    RamboLI阅读 785评论 0 1