欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-09 18:58:32
...

工厂方法模式(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