美文网首页iOS Developer
类工厂方法 == 加属性的初始化方法

类工厂方法 == 加属性的初始化方法

作者: JACK_岩 | 来源:发表于2017-05-15 17:47 被阅读42次

/*    什么是类工厂方法:    用于快速创建对象的类方法, 我们称之为类工厂方法    类工厂方法中主要用于 给对象分配存储空间和初始化这块存储空间    规范:   

 1.一定是类方法 +    

 2.方法名称以类的名称开头, 首字母小写    

 3.一定有返回值, 返回值是id/instancetype    

 */

Person * p = [Person personWithAge:15]; 

NSLog(@"%@",p);   

 Student *stu = [Student     studentWithAge:15 andNo:20];   

 NSLog(@"%@",stu);  

  return 0;

}

#import

@interface Person : NSObject

@property int age;

+(instancetype)personWithAge:(int)age;

- (instancetype)initWithAge:(int)age;

@end

#import "Person.h"

@implementation Person

//    return [[Person alloc] init];

// 注意: 以后但凡自定义类工厂方法, 在类工厂方法中创建对象一定不要使用类名来创建

// 一定要使用self来创建

// self在类方法中就代表类对象, 到底代表哪一个类对象呢?

// 谁调用当前方法, self就代表谁

//自定义构造方法

- (instancetype)initWithAge:(int)age

{  

 if (self = [super init]) 

   {

        _age = age;   

    }    

return self;

}

//配套的类工厂方法

+(instancetype)personWithAge:(int)age{  

  //    Person *p = [[Person alloc] init];   

 //    Person *p = [[self alloc] init];    

//    p.age = age;  

 //    return p;    

//用一个匿名对象调用本类的自定义构造方法    

return [[self alloc]initWithAge:age];}

//重写description方法,改变描述

- (NSString *)description{ 

   return [NSString stringWithFormat:@"年龄=%i",_age];}

@end

#import

#import "Person.h"

@interface Student : Person

@property int no;

+ (instancetype)studentWithAge:(int)age andNo:(int)no;

- (instancetype)initWithAge:(int)age andNo:(int)no;

@end

#import "Student.h"

@implementation Student

+ (instancetype)studentWithAge:(int)age andNo:(int)no

{

return [[self alloc]initWithAge:age andNo:no];

}

//自定义构造方法

- (instancetype)initWithAge:(int)age andNo:(int)no

{

if (self = [super initWithAge:age]) {

_no = no;

}

return self;

}

- (NSString *)description

{

return [NSString stringWithFormat:@"年龄=%i学号=%i",[self age],_no];

}

@end

类工厂的主要理念在于产生并返回一个特定类的实例对象,并在产生对象时尽可能的预填充数据。相比调用 alloc/init 再设置特性,使用类工厂的一个显而易见的好处就是,你的代码将会缩短很多。

这样,你就能使用一个方法来创建一个对象并初始化它的所有特性,而不需要用一个方法来创建对象,再用很多行代码来设置各种特性。与此同时,这种技术还有个不太明显的好处。

它强制了每个使用你的类的人必须提供你所需要的每一项数据,以创建一个功能完整的实例对象。鉴于你在本教程的前面部分所创建的那些对象,你可能也发现了,往往很容易就忘记了一个或两个特性的初始化。有了类工厂方法, 你将被强制关注你创建对象所需要的每一项特性。

相关文章

  • 类工厂方法 == 加属性的初始化方法

    /* 什么是类工厂方法: 用于快速创建对象的类方法, 我们称之为类工厂方法 类工厂方法中主要用于 给对...

  • objective-c 自定义类工厂方法

    类工厂方法 用于快速创建对象的类方法,我们称之为类工厂方法类工厂方法中主要用于给对象分配储存空间和初始化这块储存空...

  • 重学iOS——6.类工厂方法注意点以及id和instancety

    类工厂方法的注意点 类工厂方法是一种用于分配、初始化实例并返回一个它自己的实例的类方法。类工厂方法很方便,因为它们...

  • oc一些小细节

    工厂类方法: 用于快速创建对象的类方法 类工厂方法主要用于给对象分配存储空间和初始化这块存储空间 类: 类的本质:...

  • 数组笔记(极客班)

    NSArray有三种方法初始化: 1,工厂方法:arrayWithObjects,加nil结束; 2,初始化器方式...

  • Objective-C基础学习之自定义类工厂方法

    1.自定义工厂方法 什么是工厂方法(快速创建方法)类工厂方法是一种用于分配、初始化实例并返回一个它自己的实例的类方...

  • 类工厂方法

    1.自定义工厂方法 什么是工厂方法(快速创建方法)类工厂方法是一种用于分配、初始化实例并返回一个它自己的实例的类方...

  • js实现各种设计模式 最全最详细

    简单工厂模式 定义: 又叫静态工厂方法,根据不同参数创建不同对象,并赋予属性和方法 应用:抽取类相同的属性和方法封...

  • From Objective-C to Ruby(4)-类和模块

    类 定义类 OC: ruby: 初始化方法 OC: ruby: 实例变量和属性 OC: ruby: 类方法和对象方...

  • Swift class类的初始化

    类的初始化规则 1. 无父类,有默认值 所有属性都有默认值时,可以有类的初始化方法,也可以不实现类的初始化方法。当...

网友评论

    本文标题:类工厂方法 == 加属性的初始化方法

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