디자인 패턴 C++ 팩토리 메소드 패턴

권장 읽기 디자인 패턴 C++ 단순 팩토리 패턴

팩토리 메소드 패턴은 단순 팩토리 패턴의 단점을 바탕으로 최적화한 것으로, 단순 팩토리 패턴에서 제품 종류를 늘리거나 줄이기 위해서는 팩토리에서 if-else 판단을 수정해야 한다는 것은 모두가 알고 있는 사실입니다. 이것은 분명히 우리 코드 개발의 개폐 원칙을 준수하지 않으며 확장하기가 매우 번거롭습니다.

팩토리 메소드 패턴 = 단순한 팩토리 패턴 + "개폐 원리"

정의 아이디어 : 팩토리 부모 클래스는 제품 객체를 생성하기 위한 공용 인터페이스를 정의하는 역할을 하고, 팩토리 하위 클래스는 특정 제품 객체를 생성하는 역할을 합니다. 어떤 구체적인 제품 클래스를 인스턴스화해야 하는지 결정하기 위해 팩토리 하위 클래스를 통해

장점 :

  1. 특정 클래스 이름, 특정 매개변수를 기억할 필요가 없습니다.
  2. 객체 생성과 사용의 분리 달성
  3. 시스템의 확장성이 좋아지고 개폐의 원칙을 준수합니다.

단점 :

  1. 시스템의 클래스는 쌍으로 추가되어 시스템의 복잡성과 이해도를 높입니다.

적용 가능한 시나리오 :

  1. 클라이언트는 특정 제품 범주의 이름을 알 필요가 없지만 해당 공장만 알면 됩니다.
  2. 클래스 생성 및 구현의 세부 사항에 신경 쓰지 마십시오.

코드 구현 : (휴대폰 제품)
여기에 이미지 설명 삽입

//抽象手机
class AbstractPhone
{
    
    
public:
	virtual void ShowName() = 0;
};

//华为
class Huawei : public AbstractPhone
{
    
    
public:
	virtual void ShowName()
	{
    
    
		cout << "Huawei Phone" << endl;
	}
};

//小米
class Xiaomi : public AbstractPhone
{
    
    
public:
	virtual void ShowName()
	{
    
    
		cout << "Xiaomi Phone" << endl;
	}
};

//苹果
class Apple : public AbstractPhone
{
    
    
public:
	virtual void ShowName()
	{
    
    
		cout << "Apple Phone" << endl;
	}
};

//抽象工厂
class AbstractPhoneFactory
{
    
    
public:
	virtual AbstractPhone* CreatePhone() = 0;
};

//华为工厂
class HuaweiFactory : public AbstractPhoneFactory
{
    
    
public:
	virtual AbstractPhone* CreatePhone()
	{
    
    
		return new Huawei();
	}
};

//小米工厂
class XiaomiFactory : public AbstractPhoneFactory
{
    
    
public:
	virtual AbstractPhone* CreatePhone()
	{
    
    
		return new Xiaomi();
	}
};

//苹果工厂
class AppleFactory : public AbstractPhoneFactory
{
    
    
public:
	virtual AbstractPhone* CreatePhone()
	{
    
    
		return new Apple();
	}
};

시험:

void test()
{
    
    
	//创建一个工厂
	AbstractPhoneFactory* factory = nullptr;
	//创建一个手机
	AbstractPhone* phone = nullptr;

	//指定工厂是华为工厂
	factory = new HuaweiFactory;
	//通过华为工厂创建一个手机
	phone = factory->CreatePhone();
	phone->ShowName();

	delete phone;
	delete factory;

	factory = new XiaomiFactory;
	phone = factory->CreatePhone();
	phone->ShowName();

	delete phone;
	delete factory;

	factory = new AppleFactory;
	phone = factory->CreatePhone();
	phone->ShowName();

	delete phone;
	delete factory;
}

실행 결과:
여기에 이미지 설명 삽입
권장 읽기 디자인 패턴 C++ 추상 팩터리 패턴

Supongo que te gusta

Origin blog.csdn.net/qq_44443986/article/details/117519327
Recomendado
Clasificación