496 玩具工厂

原题网址:https://www.lintcode.com/problem/toy-factory/description

描述

工厂模式是一种常见的设计模式。请实现一个玩具工厂 ToyFactory 用来产生不同的玩具类。可以假设只有猫和狗两种玩具。

您在真实的面试中是否遇到过这个题?  

样例

ToyFactory tf = ToyFactory();
Toy toy = tf.getToy('Dog');
toy.talk(); 
>> Wow

toy = tf.getToy('Cat');
toy.talk();
>> Meow


思路:考察多态。不同事物接收同一消息而产生不同的动作。
Toy是虚基类,Dog和Cat公有继承Toy,分别实现各自的talk函数,即输出Wow和Meow。
ToyFactory类的getToy函数根据传入的字符串是“Dog”还是“Cat”返回各自的类指针(子类指针)。


AC代码:
/**
 * Your object will be instantiated and called as such:
 * ToyFactory* tf = new ToyFactory();
 * Toy* toy = tf->getToy(type);
 * toy->talk();
 */
class Toy {
public:
    virtual void talk() const=0;
};

class Dog: public Toy {
    // Write your code here
    void talk() const
    {
        cout<<"Wow"<<endl;
    }
};

class Cat: public Toy {
    // Write your code here
    void talk() const
    {
        cout<<"Meow"<<endl;
    }
};

class ToyFactory {
public:
    /**
     * @param type a string
     * @return Get object of the type
     */
    Toy* getToy(string& type) {
        // Write your code here
        if (type=="Dog")
        {
            Dog * dog=new Dog();
            return dog;
        }
        if (type=="Cat")
        {
            Cat * cat=new Cat();
            return cat;
        }
        return NULL;
    }
};

 

 参考:

[LintCode] Toy Factory 玩具工厂

https://blog.csdn.net/Cai_Guanglei/article/details/77503991
LintCode算法题解——移动零、玩具工厂、左填充、丑数

原文地址:https://www.cnblogs.com/Tang-tangt/p/9258862.html