美文网首页iOS Developer
Swift设计模式:2.工厂方法模式

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

作者: 爱抽烟的芭比 | 来源:发表于2017-08-14 21:44 被阅读282次

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

    相关文章

      网友评论

        本文标题:Swift设计模式:2.工厂方法模式

        本文链接:https://www.haomeiwen.com/subject/qkdprxtx.html