工厂模式有三种:简单工厂模式,工厂方法模式,抽象工厂模式,其中简单工厂模式不属于23种设计模式,实例如下:
#include <iostream>
using namespace std;
/*
* 不符合开闭原则,不是23种标准的设计模式
* */
class Fruit {
public:
virtual ~Fruit() {}
virtual void sayName() = 0;
};
class Banana: public Fruit {
public:
virtual void sayName() {
cout << "Banana" << endl;
}
};
class Apple: public Fruit {
public:
virtual void sayName() {
cout << "Apple" << endl;
}
};
class Factory {
public:
Fruit* create(char* p) {
if (strcmp(p, "banana")) {
return new Banana;
} else if (strcmp(p, "apple")) {
return new Apple;
} else {
return NULL;
}
}
};
int main() {
Factory* fac = new Factory;
Fruit* banana = fac->create("banana");
banana->sayName();
delete banana;
Fruit* apple = fac->create("apple");
apple->sayName();
delete apple;
delete fac;
return 0;
}
工厂方法模式如下:
#include <iostream>
/*
* 符合开闭原则,添加新的产品不需要修改原有的代码,只需要添加新的代码
* 添加一种新的水果只需要添加一个水果类,然后添加一种新的工厂即可
* */
using namespace std;
class Fruit {
public:
virtual ~Fruit() {}
virtual void sayName() = 0;
};
class Banana: public Fruit {
public:
virtual void sayName() {
cout << "Banana" << endl;
}
};
class Apple: public Fruit {
public:
virtual void sayName() {
cout << "Apple" << endl;
}
};
class Factory {
public:
virtual ~Factory() {}
virtual Fruit* create() = 0;
};
class BananaFactory: public Factory {
public:
Fruit* create() {
return new Banana;
}
};
class AppleFactory: public Factory {
public:
Fruit* create() {
return new Apple;
}
};
int main() {
Factory* fac = NULL;
Fruit* fruit = NULL;
fac = new BananaFactory;
fruit = fac->create();
fruit->sayName();
delete fruit;
delete fac;
fac = new AppleFactory;
fruit = fac->create();
fruit->sayName();
delete fruit;
delete fac;
return 0;
}
创建模式(5种)
结构模式(7种)
行为模式(11种)
- 模板方法模式(Template Method)
- 观察者模式(Observer)
- 状态模式(State)
- 策略模式(Strategy)
- 职责链模式(Chain of Responsibility)
- 命令模式(Command)
- 访问者模式(Visitor)
- 中介者模式(Mediator)
- 备忘录模式(Memento)
- 迭代器模式(Iterator)
- 解释器模式(Interpreter)