美文网首页
类工厂方法

类工厂方法

作者: 越天高 | 来源:发表于2019-02-21 21:53 被阅读1次

    1.自定义工厂方法

    • 什么是工厂方法(快速创建方法)
      类工厂方法是一种用于分配、初始化实例并返回一个它自己的实例的类方法。类工厂方法很方便,因为它们允许您只使用一个步骤(而不是两个步骤)就能创建对象. 例如new
    • 自定义类工厂方法的规范
      (1)一定是+号开头
      (2)返回值一般是instancetype类型
      (3)方法名称以类名开头,首字母小写
    • 示例
    + (id)person;
    + (id)person
    {
        return  [[Person alloc]init];
    }
    
    + (id)personWithAge:(int)age;
    + (id)personWithAge:(int)age
    {
        Person *p = [[self alloc] init];
        [p setAge:age];
        return p;
    }
    

    2.子父类中的类工厂方法

    • 由于之类默认会继承父类所有的方法和属性, 所以类工厂方法也会被继承
    • 由于父类的类工厂方法创建实例对象时是使用父类的类创建的, 所以如果子类调用父类的类工厂方法创建实例对象,创建出来的还是父类的实例对象
    • 为了解决这个问题, 以后在自定义类工厂时候不要利用父类创建实例对象, 改为使用self创建, 因为self谁调用当前方法self就是谁
    • 示例
    @interface Person : NSObject
    + (id)person;
    @end
    
    @implementation Person
    + (id)person
    {
        return  [[Person alloc]init];
    }
    @end
    
    @interface Student : Person
    @property NSString *name;
    @end
    
    @implementation Student
    
    @end
    
    int main(int argc, const char * argv[])
    {
        Student *stu = [Student person];// [[Person alloc] init]
        [stu setName:@"lnj"]; // 报错, 因为Person中没有setName
    }
    
    • 正确写法
    @interface Person : NSObject
    + (id)person;
    @end
    
    @implementation Person
    + (id)person
    {
    //   return  [[Person alloc]init];
    //     谁调用这个方法,self就代表谁
    //    注意:以后写类方法创建初始化对象,写self不要直接写类名
        return  [[self alloc]init];
    }
    @end
    
    @interface Student : Person
    @property NSString *name;
    @end
    
    @implementation Student
    @end
    
    int main(int argc, const char * argv[])
    {
        Student *stu = [Student person];// [[Student alloc] init]
        [stu setName:@"lnj"];
    }
    

    相关文章

      网友评论

          本文标题:类工厂方法

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