希赛考试网
首页 > 软考 > 软件设计师

工厂模式 菜鸟教程

希赛网 2024-06-15 15:44:36

工厂模式是一种常用的设计模式,它主要用于创建对象。工厂模式提供了一种通用的接口来创建对象,使得客户端无需关心具体实现的细节。在本文中,我们将从多个角度讨论工厂模式,着重介绍它的实现方式、优缺点以及应用场景。

一、工厂模式的实现方式

工厂模式的主要实现方式有三种:简单工厂模式、工厂方法模式和抽象工厂模式。

1. 简单工厂模式

简单工厂模式也称为静态工厂模式,它通过一个工厂类来创建具体的产品实例。客户端使用工厂类创建实例时,只需要传入对应的参数即可。下面是一个简单工厂模式的示例:

```

class Product{

public:

virtual void func() = 0;

};

class ProductA : public Product{

public:

void func() override {

cout << "ProductA func" << endl;

}

};

class ProductB : public Product{

public:

void func() override {

cout << "ProductB func" << endl;

}

};

class Factory{

public:

static unique_ptr create_product(int type){

switch (type){

case 0:

return make_unique ();

case 1:

return make_unique ();

default:

break;

}

}

};

```

2. 工厂方法模式

工厂方法模式也称为多态工厂模式,它将工厂类抽象出来,每个具体产品类都对应一个工厂类。客户端使用具体产品类的对应工厂类创建实例。下面是一个工厂方法模式的示例:

```

class Product{

public:

virtual void func() = 0;

};

class ProductA : public Product{

public:

void func() override {

cout << "ProductA func" << endl;

}

};

class ProductB : public Product{

public:

void func() override {

cout << "ProductB func" << endl;

}

};

class Factory{

public:

virtual unique_ptr create_product() = 0;

};

class FactoryA : public Factory{

public:

unique_ptr create_product() override {

return make_unique ();

}

};

class FactoryB : public Factory{

public:

unique_ptr create_product() override {

return make_unique ();

}

};

```

3. 抽象工厂模式

抽象工厂模式也称为工厂族模式,它将每个具体工厂类作为一个工厂族,每个工厂族负责创建多个产品族中的一个或多个产品。客户端使用工厂族创建实例,而不是直接使用具体产品类或工厂类。下面是一个抽象工厂模式的示例:

```

class ProductA{

public:

virtual void func() = 0;

};

class ProductA1 : public ProductA{

public:

void func() override {

cout << "ProductA1 func" << endl;

}

};

class ProductA2 : public ProductA{

public:

void func() override {

cout << "ProductA2 func" << endl;

}

};

class ProductB{

public:

virtual void func() = 0;

};

class ProductB1 : public ProductB{

public:

void func() override {

cout << "ProductB1 func" << endl;

}

};

class ProductB2 : public ProductB{

public:

void func() override {

cout << "ProductB2 func" << endl;

}

};

class Factory{

public:

virtual unique_ptr create_product_a() = 0;

virtual unique_ptr create_product_b() = 0;

};

class Factory1 : public Factory{

public:

unique_ptr create_product_a() override {

return make_unique ();

}

unique_ptr create_product_b() override {

return make_unique ();

}

};

class Factory2 : public Factory{

public:

unique_ptr create_product_a() override {

return make_unique ();

}

unique_ptr create_product_b() override {

return make_unique ();

}

};

```

二、工厂模式的优缺点

1. 优点

(1) 工厂模式实现了对象的创建和使用分离,降低了客户端的耦合度,使得程序更易于维护和扩展。

(2) 工厂模式可以隐藏具体实现的细节,降低了客户端的复杂度,更易于使用。

(3) 工厂模式可以实现一些高级的编程技巧,例如依赖倒置、开闭原则等。

2. 缺点

(1) 工厂模式增加了代码的复杂度,需要创建多个类和接口。

(2) 工厂模式存在创建过程和使用过程的耦合,如果一个类的构造函数中需要传入工厂类的对象,那么这个类的使用必须要依赖于工厂类的实现。

三、工厂模式的应用场景

1. 实例化对象需要复杂的操作,例如数据库连接等。

2. 需要创建一组相互依赖的对象。

3. 客户端不需要关心对象的创建过程,只需要调用工厂类的函数创建实例即可。

4. 需要解耦客户端和具体实现的代码。

扫码咨询 领取资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件