gpt4 book ai didi

ios - 我正在用 Objective C 创建一个框架,它需要一个好的构造函数模式

转载 作者:行者123 更新时间:2023-11-29 11:44:05 26 4
gpt4 key购买 nike

我在 objective C 中创建了一个框架,它具有多个特性,其中所有特性都需要在实例化库实例时进行初始化,我还提供了为任何特性提供替代实现的灵 active ,以实现我正在使用构建器模式如下,我的问题是,哪种设计模式更适合这里?或者我怎样才能提高性能/内存使用,请给我一些解决这个问题的模式

-(instancetype)initWithBuilder:(LibraryBuilder *)builder {
self = [super init];
if (self) {
// allocate feature1 instance
if (builder.feature1)
self.feature1 = builder.feature1;
else
self.feature1 = [[InterfaceA alloc] initWithLib:self];

// allocate feature2 instance
if (builder.feature2)
self.feature2 = builder.feature2;
else
self.feature2 = [[InterfaceB alloc] init];

// allocate App Configuration instance
if (builder.feature3)
self.feature3 = builder.feature3;
else
self.feature3 = [[InterfaceC alloc] init];

// allocate feature4 instance
if (builder.feature4)
self.feature4 = builder.feature4;
else
self.feature4 = [[InterfaceD alloc] init];

// allocate feature5 instance
if (builder.feature5)
self.feature5 = builder.feature5;
else
self.feature5 = [[InterfaceE alloc] init];

// allocate feature6 instance
if (builder.feature6)
self.feature6 = builder.feature6;
else
self.feature6 = [[InterfaceF alloc] init];

// allocate feature7 instance
if (builder.feature7)
self.feature7 = builder.feature7;
else
self.feature7 = [[InterfaceG alloc] init];

// allocate feature8 instance
if (builder.feature8)
self.feature8 = builder.feature8;
else
self.feature8 = [[InterfaceH alloc] init];

return self;
}

最佳答案

假设我对你的理解是正确的(没有任何答案假设这个吗?),在 Objective-C 中似乎更容易。

首先,您不需要单独的类 LibraryBuilder。只需使用字典。

其次,您可以利用 KVC 和 Objective-C 的动态绑定(bind)。

一个。为所有功能创建查找,i。 e.在类方法中(或 +initialize 或其他)

+(NSDictionary*)defaultFeatureClasses
{
return
@{
@"featureName1" : [FeatureClass1 class],
@"featureName2" : [FeatureClass2 class],
// …
@"featureNameN" : [FeatureClassN class],
};
});

如果类名对应于功能名,可以简化它,但这看起来没什么大不了的。

接下来,编写一个带有特征字典的初始化器:

- (instancetype)initWithFeatureSet:(NSDictionary*)features
{
self = [super init];
if (self)
{
[defaultClasses enumerateKeysAndObjectsUsingBlock:
^(NSString *key, Class featureClass, BOOL *stop)
{
id feature = features[key];
if (feature==nil)
{
feature = [featureClass new];
}
[self setValue:feature forKey:key];
}

}
return self;
}

然后你就可以很容易地建立一个图书馆

 … [[Library alloc] initWithFeatures:
@{
@"Feature1" : myFeaatureA,
@"Feature2" : anotherCustomFeature,
}];

要扩展功能,您只需在一个方法中更改一行。

关于ios - 我正在用 Objective C 创建一个框架,它需要一个好的构造函数模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44922628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com