iOS设计模式——简单工厂模式的使用

作者: CoderGuogt | 来源:发表于2016-11-14 21:55 被阅读554次

    简单工厂模式(Factory Pattern)是 开发中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
    在简单工厂模式中,我们在创建对象时不会暴露创建逻辑,并且是通过使用一个共同的方法来指向新创建的对象,定义一个创建对象的方法,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

    1.创建一个Person类,并在Person类的.h文件中,声明两个方法

    /**
     *  创建一个人物
     *
     *  @param type 人物的类型
     */
    + (Person *)personWithType:(PersonType)type;
    
    /**
     *  做一些事情
     */
    - (void)doSomeThing;
    

    PersonType是一个枚举,代表着Person的类别

    typedef NS_ENUM(NSUInteger, PersonType) {
        PersonTypeMajor = 1,  /**< 成年人 */
        PersonTypeYoungster,  /**< 青少年 */
        PersonTypeKid  /**< 小孩 */
    };
    

    然后在.m文件中实现在.h文件的两个方法

    + (Person *)personWithType:(PersonType)type {
        switch (type) {
            case PersonTypeMajor:
                return [[Major alloc] init];
                break;
            case PersonTypeYoungster:
                return [[Youngster alloc] init];
                break;
            case PersonTypeKid:
                return [[Kid alloc] init];
                break;
        }
    }
    
    - (void)doSomeThing {
        
    }
    

    根据传入的type类型,创建相对应的子类型
    2.接下来创建三个Person的子类 Major 、Youngster、Kid,并且在这三个子类的实现文件中,重写父类doSomething的方法(因为继承的关系,三个子类都有同样的方法)

    #import "Major.h"
    
    @implementation Major
    
    - (void)doSomeThing {
        
        NSLog(@"成年人");
    }
    
    @end
    
    #import "Youngster.h"
    
    @implementation Youngster
    
    - (void)doSomeThing {
        
        NSLog(@"青少年");
    }
    
    @end
    
    #import "Kid.h"
    
    @implementation Kid
    
    - (void)doSomeThing {
        
        NSLog(@"小孩");
    }
    
    @end
    

    3.创建Person类根据不同的类型去创建实例对象

    Person *major = [Person personWithType:PersonTypeMajor];
    [major doSomeThing];
            
    Person *youngster = [Person personWithType:PersonTypeYoungster];
    [youngster doSomeThing];
            
    Person *kid = [Person personWithType:PersonTypeKid];
    [kid doSomeThing];
    

    得到的结果

    Paste_Image.png

    这样,通过一个工厂模式的工厂方法去创建了一个类族,只需要利用Person根据类型去创建一个实例对象,然后执行相应的操作,不同的类型得到不一样的结果。(有不对的地方,欢迎指出)

    相关文章

      网友评论

      • 1剑天下:这是简单工厂模式,不是什么工厂方法模式
      • Mr卿:工厂模式没这么简单吧
        Mr卿:@藍眼淚 嗯,好的
        CoderGuogt:@薇薇卿 这只是工厂模式的一种工厂方法,还有两个方法

      本文标题:iOS设计模式——简单工厂模式的使用

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