设计模式

91 阅读1分钟

单例,饿汉有趣的地方,今天在看"黑马_设计模式"时惊奇于饿汉单例的实现,这么创建静态对象,自己代码试了下竟然编译成功了,惊奇在于调用私有的构造函数

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;
}