objective-c – 如何用许多构造函数参数初始化一个类?
我有一个类需要创建许多参数.它是一种音频处理器,需要采样率,采样分辨率,通道数等.大多数参数都有合理的默认值.并且它们中的大多数应该只能在初始化器(构造函数)中设置,因为之后更改它们是没有意义的.我不想用所有参数创建一个庞大的初始化器,因为(1)它将是巨大的,实质上它只会复制传递的值,不做任何实际的工作,(2)用户必须为所有参数指定值参数.什么是解决这个问题的好方法?
我试过为params编写getter和setter.这意味着我无法在构造函数中创建“真实”音频处理单元,因为参数值不知道.我不得不介绍一种新方法(比如prepareForWork),以便用户可以执行以下操作: AudioProcessor *box = [[AudioProcessor alloc] init]; [box setSampleRate:…]; [box setNumberOfChannels:…]; [box prepareForWork]; [box doSomeProcessing]; 这很好,因为它不需要笨重的构造函数.此外,默认值在初始化程序中设置,这意味着我可以采用一个新的AudioProcessor实例,它仍然可以做一些工作.另一方面是(1)在实例可以执行任何实际工作之前必须调用一个额外的方法.(2)在调用prepareForWork之后,类应该拒绝更改任何参数.保护这些不变量将需要一些我不喜欢的样板代码. 我以为我可以创建一个特殊的“预设”类,如下所示: @interface SoundConfig : NSObject { NSUInteger numberOfChannels; NSUInteger sampleResolution; float sampleRate; } 然后在AudioProcessor初始化程序中需要此类的实例: @interface AudioProcessor : NSObject {…} - (id) initWithConfig: (SoundConfig*) config; 默认值将在SoundConfig初始化程序中设置,AudioProcessor构造函数将很简单,并且没有不变量可以手动观看. 我想到的另一种方法是一种AudioProcessorBuilder类.您将创建一个实例,通过访问器设置音频参数,然后最终它将为您构建一个AudioProcessor实例,通过非公共设置器设置所有属性,以便您以后无法更改它们(并打破不变量) . 现在我写这篇文章,我赞成SoundConfig方法.你是如何解决这个问题的,有更好的方法吗? 解决方法
了解如何实现NSURLConnection和
used.它使用NSURLRequest对象对其进行参数化,类似于SoundConfig对象参数化AudioProcessor对象的方式.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |