原题网址: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算法题解——移动零、玩具工厂、左填充、丑数