返回

NSNumber的独特设计模式

IOS

使用设计模式,便可实现诸多编程难题的有效解决方案,同时大幅提升代码可读性,更有助于将代码进行模块化重用。了解不同设计模式的应用场景及使用方法,对于编程人员而言至关重要。如今,让我们探索NSNumber中应用的设计模式——抽象工厂模式。

以下是一些有关NSNumber中抽象工厂模式的示例代码:

// 抽象工厂角色
class AbstractNumberFactory {
public:
    virtual Number* createIntegerNumber(int value) = 0;
    virtual Number* createFloatNumber(float value) = 0;
    virtual Number* createBooleanNumber(bool value) = 0;
};

// 具体工厂角色
class IntegerNumberFactory : public AbstractNumberFactory {
public:
    Number* createIntegerNumber(int value) override {
        return new IntegerNumber(value);
    }

    Number* createFloatNumber(float value) override {
        return nullptr;  // 整型工厂无法创建浮点数
    }

    Number* createBooleanNumber(bool value) override {
        return nullptr;  // 整型工厂无法创建布尔值
    }
};

class FloatNumberFactory : public AbstractNumberFactory {
public:
    Number* createIntegerNumber(int value) override {
        return nullptr;  // 浮点工厂无法创建整数
    }

    Number* createFloatNumber(float value) override {
        return new FloatNumber(value);
    }

    Number* createBooleanNumber(bool value) override {
        return nullptr;  // 浮点工厂无法创建布尔值
    }
};

class BooleanNumberFactory : public AbstractNumberFactory {
public:
    Number* createIntegerNumber(int value) override {
        return nullptr;  // 布尔工厂无法创建整数
    }

    Number* createFloatNumber(float value) override {
        return nullptr;  // 布尔工厂无法创建浮点数
    }

    Number* createBooleanNumber(bool value) override {
        return new BooleanNumber(value);
    }
};

// 客户端代码
int main() {
    // 创建不同类型的具体工厂对象
    AbstractNumberFactory* integerFactory = new IntegerNumberFactory();
    AbstractNumberFactory* floatFactory = new FloatNumberFactory();
    AbstractNumberFactory* booleanFactory = new BooleanNumberFactory();

    // 使用工厂对象创建不同类型的数据对象
    Number* integerNumber = integerFactory->createIntegerNumber(10);
    Number* floatNumber = floatFactory->createFloatNumber(3.14);
    Number* booleanNumber = booleanFactory->createBooleanNumber(true);

    // 使用数据对象
    cout << "Integer number: " << integerNumber->getValue() << endl;
    cout << "Float number: " << floatNumber->getValue() << endl;
    cout << "Boolean number: " << booleanNumber->getValue() << endl;

    // 释放资源
    delete integerNumber;
    delete floatNumber;
    delete booleanNumber;

    delete integerFactory;
    delete floatFactory;
    delete booleanFactory;

    return 0;
}

希望本篇文章能够帮助您更好地理解NSNumber中的抽象工厂模式及其应用。