是设计模式:创建具有标识符的对象或返回(如果已存在)?

时间:2015-02-28 10:30:08

标签: ios objective-c oop design-patterns

主要原则:

  • object可以通过class method创建,提供唯一标识符(无论如何)

  • 如果具有给定标识符的object不存在,则返回新的object否则返回现有

  • class保证只有一个具有给定标识符的object可以存在(内部singleton

所以要保持objects具有唯一字段(fe id)以供将来使用,因为它们可能具有自己的状态(加载,加载等),我们可以在任何需要的地方使用它而无需重新使用-creating。

design pattern吗?

F.e:

Advirtisement.h

@interface Advertisment : NSObject

+ (instancetype)adWithID:(NSString *)adID;    
+ (NSMutableArray *)sharedAds;

Advertisement.m

+ (instancetype)adWithID:(NSString *)adID {

    NSMutableArray *ads = [[self class] sharedAds];
        // Look for existing ad based on the id
        Advertisement *returnableAd = nil;
        for (Advertisement *currentAd in ads) {
            if ([currentAd.adID isEqualToString:adID]) {
                returnableAd = currentAd;
                break;
            }
        }
        // Create a new ad instance for this id if one doesn't already exist.
        if (!returnableAd) {
            returnableAd = [[[self class] alloc] initWithID:adID];                                                                  
            [ads addObject:returnableAd];
        }
        return returnableAd;
    }
}

+ (NSMutableArray *)sharedAds
{
    static NSMutableArray *sharedAds;

    if (!sharedAds) {
        sharedAds = [NSMutableArray array];
    }
    return sharedAds;
}

1 个答案:

答案 0 :(得分:0)

它的Lazy Initialization - 有些人也认为它是Factory Pattern的一个实例(其他人会认为工厂本身并不构成模式)