工厂模式
定义一个创建对象的接口。
当一个类需要实例化另一个类的派生类的时候,让派生类决定实例化哪一个类(将实例化延迟到子类)。
- 简单工厂模式
#include <iostream>
using namespace std;
enum CpuType
{
A, B
};
class CPU
{
public:
virtual void work() = 0;
};
class CpuA : public CPU
{
public:
virtual void work()
{
cout << "CpuA work()" << endl;
}
};
class CpuB : public CPU
{
public:
virtual void work()
{
cout << "CpuB work()" << endl;
}
};
class Facty
{
public:
CPU* createCpu(enum CpuType type)
{
if (type == A) return new CpuA();
else if (type == B) return new CpuB();
}
};
int main()
{
Facty fty;
CPU* pcpu = fty.createCpu(A);
pcpu->work();
pcpu = fty.createCpu(B);
pcpu->work();
return 0;
}
- 复杂工厂模式
#include <iostream>
using namespace std;
class Cpu
{
public:
virtual void work() = 0;
};
class CpuA : public Cpu
{
public:
void work()
{
cout << "CpuA work()" << endl;
}
};
class CpuB : public Cpu
{
public:
void work()
{
cout << "CpuB work()" << endl;
}
};
class Factory
{
public:
virtual Cpu* createCpu() = 0;
};
class FactoryA : public Factory
{
public:
Cpu* createCpu()
{
return new CpuA;
}
};
class FactoryB : public Factory
{
public:
Cpu* createCpu()
{
return new CpuB;
}
};
int main()
{
FactoryA fa;
Cpu* pCpu = fa.createCpu();
pCpu->work();
FactoryB fb;
pCpu = fb.createCpu();
pCpu->work();
return 0;
}
观察者模式
定义对象之间的一对多的关系,发布-订阅关系,让subject改变状态的时候,依赖于subject的obejct们都可以得到通知并自动更新。
在subject中注册的object列表也是不断更新的。
队列中的每一个对象都是有一个共同的抽象基类,subject是不会care观察者的变化的。