Я пытаюсь лучше понять Factory Pattern, как показано здесь:
http://www.oodesign.com/factory-pattern.html
Примеры на Java, а я не очень сильный программист на Java. Я в основном не понимаю строку Constructor product ... = cClass... String.class
. Я думаю, что у меня есть «концепция», но аналогичны ли эти два блока кода?
Кроме того, есть ли в Cocoa Foundation пример, использующий этот шаблон? Единственное, о чем я могу думать, это регистрация классов ячеек UIKit против UITableView
.
Java:
class ProductFactory
{
private HashMap m_RegisteredProducts = new HashMap();
public void registerProduct (String productID, Class productClass)
{
m_RegisteredProducts.put(productID, productClass);
}
public Product createProduct(String productID)
{
Class productClass = (Class)m_RegisteredProducts.get(productID);
Constructor productConstructor = cClass.getDeclaredConstructor(new Class[] { String.class });
return (Product)productConstructor.newInstance(new Object[] { });
}
}
Цель-C:
@interface ProductFactory : NSObject
- (void)registerProduct:(Class)productClass withIdentifier:(NSString *)identifier;
- (id)newProductForIdentifier:(NSString *)identifier;
@end
@interface ProductFactory();
@property (strong, nonatomic) NSMutableDictionary *registeredProducts;
@end
@implementation ProductFactory
- (id)init
{
self = [super init];
if (self) {
_registeredProducts = [NSMutableDictionary dictionary];
}
return self;
}
- (void)registerProduct:(Class)productClass withIdentifier:(NSString *)identifier
{
self.registeredProducts[identifier] = NSStringFromClass(productClass);
}
- (id)newProductForIdentifier:(NSString *)identifier
{
NSString *classString = self.registeredProducts[identifier];
Class productClass = NSClassFromString(classString);
return [[productClass alloc] init];
}
@end