我正试图更好地掌握工厂模式,如下所示:
http://www.oodesign.com/factory-pattern.html
示例是Java,我不是一个非常强大的Java程序员。我大多不理解Constructor product ... = cClass... String.class
行。我想我已经有了“概念”,但是这两个代码块类似吗?
此外,Cocoa Foundation中是否有使用此模式的示例?我能想到的唯一一个就是UIKit针对UITableView
注册单元格类。
爪哇:
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
答案 0 :(得分:1)
是的,这通常是类似的。我还没有做过一段时间的java,所以我无法明确解释Constructor
行,但它有点像指定初始化器的定义以及如何找到它。
您可以使用@protocol
做一些工作,以允许一系列init方法可用于实例化,并询问该类以查看它符合的协议(使用conformsToProtocol:
)。 / p>