[DP] Factory pattern

      Comments Off on [DP] Factory pattern

Factory pattern được dùng khi ta muốn khởi tạo 1 object, việc xác định chính xác đối tượng được khởi tạo phụ thuộc vào tham số đầu vào.

#include <iostream>

class Base{
public:
	virtual void show()=0; //pure virtual function
};

class Base1: public Base{
public:
    Base1(){
        std::cout <<"Base1" <<std::endl;
    }
	virtual void show() override{
		std::cout <<"Show1" <<std::endl;
	}
};

class Base2:public Base{
public:
    Base2(){
        std::cout <<"Base2"<<std::endl;
    }
	virtual void show() override{
		std::cout << "Show2" <<std::endl;
	}
};

class Factory{
public:
	static Base* Create(int i){
		if(i==1)
			return new Base1();
		if(i==2)
			return new Base2();
	}
};

int main(){
	Base* b1 = Factory::Create(1);
	Base* b2 = Factory::Create(2);
	return 0;
}

Lợi ích của Factory pattern
– Reduce code. Thay vì mỗi lần dùng phải viết if else thì gom tất cả lại trong class Factory pattern.
– Easy to expand: Khi muốn thêm 1 subclass chỉ việc add class và sửa hàm Create trong class Factory.