简单工厂模式

简单工厂模式严格意义上不能算作设计模式

结构

简单工厂模式

注解:

  • 工厂类生成抽象产品类
  • 一、二号产品类继承抽象产品类
  • 产品类具体实现抽象产品方法
  • 实现产品方法中,判断客户类需要的是哪种产品对象
  • 客户类创建抽象产品类对象,通过工厂类判断使用哪种产品

实例:

class Factory {
public:
	static AbstractProduct* RealizeProduct(int num) {
		switch (num) {
		case 0:
			return new Product1;
			break;
		case 1:
			return new Product2;
			break;
		}
		return NULL;
	}
};

class AbstractProduct {
public:
	virtual void ProductMethods() = 0;
};

class Product1 :
public AbstractProduct{

	virtual void ProductMethods() {
		//一号产品的功能
	}
};

class Product2 :
	public AbstractProduct {

	virtual void ProductMethods() {
		//二号产品的功能
	}
};

class Customer {

public:
	void main() {

		AbstractProduct* ap;
		for (int i = 0; i < 2; i++) {
			ap = Factory::RealizeProduct(i);
			ap->ProductMethods();
			delete ap;
		}
	}
};

优点

  • 客户端和具体实现类解耦
  • 不用考虑某些对象创建过程是否比较复杂

缺点

  • 增加新的功能是通过修改源代码实现的,不符合开闭原则,所以不能算为设计模式
  • 类的职责过重,一旦类出问题,会影响很多使用这个类的模块

适用场景

  • 工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂
  • 客户端只需要传入工厂类所需要的参数,对于如何创建对象并不关心
上一篇:yolov3的概念之一AP和MAP


下一篇:Harmony OS 设备开发学习记录(十五)--Wifi的AP模式建立热点