1 简单工厂模式
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;
class Fruit {
public:
virtual void sayName() = 0;
};
class Banana :public Fruit {
public:
void sayName() {
cout << "I am banana"<< endl;
}
};
class Apple :public Fruit {
public:
void sayName() {
cout << "I am apple" << endl;
}
};
class Factory {
public:
Fruit *create(char *p) {
if (strcmp(p, "banana") == 0) {
return new Banana;
}
else if (strcmp(p, "apple") == 0) {
return new Apple;
}
else {
cout << "The type can't be supported" << endl;
return NULL;
}
}
};
void main() {
Factory *f = new Factory;
Fruit *fruit = f->create("banana");
fruit->sayName();
delete fruit;
fruit = f->create("apple");
fruit->getFruit();
delete fruit;
fruit = f->create("xxx");
if (fruit != NULL) {
fruit->sayName();
delete fruit;
}
2 工厂模式
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;
class Fruit {
public:
virtual void sayName() = 0;
};
class Banana :public Fruit {
public:
void sayName() {
cout << "I am banana" << endl;
}
};
class Apple :public Fruit {
public:
void sayName() {
cout << "I am apple" << endl;
}
};
class AbstractFactory {
public:
virtual Fruit *createProduct() = 0;
};
class BananaFactory :public AbstractFactory{
public:
Fruit *createProduct() {
return new Banana;
}
};
class AppleFactory :public AbstractFactory {
public:
Fruit *createProduct() {
return new Apple;
}
};
void main() {
AbstractFactory *f = NULL;
Fruit *fruit = NULL;
f = new BananaFactory;
fruit = f->createProduct();
fruit->sayName();
delete fruit;
delete f;
f = new AppleFactory;
fruit = f->createProduct();
fruit->sayName();
delete fruit;
delete f;
}