面試必備之簡單工廠模式

一、定義

    簡單工廠模式屬於類的創建型模式,又叫做靜態工廠方法模式,但不屬於23種FOG設計模式之一。通過專門定義一個工廠類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。

二、角色和職能

1.工廠(Creator)角色
    1.簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。工廠類可以被外界直接調用,創建所需的產品對象。
2.抽象(Product)角色
    簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口。
3.具體產品(Concrete Product)角色

UML類圖如下:
在這裏插入圖片描述

三、具體實現

#include<stdio.h>
#include<iostream>
using namespace std;

class Fruit{
public:
	virtual void getName() = 0;
};

class Banana:public Fruit{
public:
	void getName(){
	     cout<< "I'm banana"<<endl;
	}
};

class Apple:public Fruit{
public:
	void getName(){
	     cout<< "I'm apple"<<endl;
	}
};
class FruitFactory{
public:
	Fruit* getFruit(char *name){
		if(strcmp(name,"Banana") == 0 ){
			return new Banana;
		}else if(strcmp(name,"Apple") == 0){
		    return new Apple;
		}//可以添加其他水果
		else{
		    cout<<"The fruit not exist."<<endl;
			exit(0);
		}
		
	}
};
int main(){

	FruitFactory *factory = nullptr;
	Fruit *fruit = nullptr;

	//創建水果工廠
	factory =  new FruitFactory;

	//根據名字創建不同的水果
	fruit = factory->getFruit("Banana");
	fruit->getName();
	delete fruit;

	fruit = factory->getFruit("Apple");
	fruit->getName();
	delete fruit;

	delete factory;

	return 0;
}

四、簡單工廠模式的優缺點

優點:
    工廠類是整個模式的關鍵所。它能夠根據給定的信息,決定究竟應該創建哪個具體類的對象。用戶在使用時可以直接根據工廠類去創建所需的實例,而無需瞭解這些對象是如何創建以及如何組織的。有利於整個軟件體系結構的優化。
缺點:
    簡單工廠模式的缺點也正體現在其工廠類上,由於工廠類集中了所有實例的創建邏輯,所以“高內聚”。另外,當系統中的具體產品類不斷增多時,可能會出現要求工廠類也要做相應的修改,擴展性並不很好,不符合設計模式的開放封閉原則

五、應用場景

簡單工廠的應用場景主要是:客戶端並不知道將要創建的實例是什麼時。
例如:
    當編寫一款軟件時,後期會對其進行功能模塊拓展,且個模塊屬於不同性質,抽象類並不相同,而此前並不知道今後拓展的模塊怎樣創建,則此時使用簡單工廠模式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章