加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

工厂模式 – Objective-C中的示例

发布时间:2020-12-16 07:04:49 所属栏目:百科 来源:网络整理
导读:我试图更好地掌握工厂模式,如下图所示: http://www.oodesign.com/factory-pattern.html 这些例子都是用Java编写的,我不是一个非常强大的Java程序员.我大多不了解构造函数产品… = cClass … String.class行.我想我已经有了“概念”,但这两个代码块类似吗?
我试图更好地掌握工厂模式,如下图所示:

http://www.oodesign.com/factory-pattern.html

这些例子都是用Java编写的,我不是一个非常强大的Java程序员.我大多不了解构造函数产品… = 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[] { });
    }
}

Objective-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

解决方法

是的,这通常是类似的.我没有做过一段时间的java,所以我不能明确地解释构造函数行,但它有点像指定初始化器的定义以及如何找到它.

您可以使用@protocols做一些工作,以允许一系列init方法可用于实例化,并询问该类以查看它符合哪个协议(使用conformsToProtocol :).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读