单例,饿汉有趣的地方,今天在看"黑马_设计模式"时惊奇于饿汉单例的实现,这么创建静态对象,自己代码试了下竟然编译成功了,惊奇在于调用私有的构造函数
class A
{
private:
A() {}
static A* p_a;
};
// 静态对象
A* A::p_a = new A;
自己写的抽象工厂
class Car
{
public:
virtual void show() = 0;
};
class Light
{
public:
virtual void show() = 0;
};
class Benze :public Car
{
void show() override { printf("Benze \n"); };
};
class BMW :public Car
{
void show() override { printf("BMW \n"); };
};
class RedLight :public Light
{
void show() override { printf("RedLight \n"); };
};
class WhiteLight :public Light
{
void show() override { printf("WhiteLight \n"); };
};
class AbstractFactory
{
public:
virtual Car* createCar() = 0;
virtual Light* createLight() = 0;
};
class BenzeFactory: public AbstractFactory
{
public:
virtual Car* createCar() override { return new Benze(); };
virtual Light* createLight() override { return new RedLight(); };
};
class BMWFactory : public AbstractFactory
{
public:
virtual Car* createCar() override { return new BMW(); };
virtual Light* createLight() override { return new WhiteLight(); };
};
int main()
{
std::shared_ptr<AbstractFactory> sp_abs_fac(new BenzeFactory());
std::shared_ptr<Car> sp_car(sp_abs_fac->createCar());
std::shared_ptr<Light> sp_light(sp_abs_fac->createLight());
sp_car->show();
sp_light->show();
std::cin.get();
return 0;
}