本文主要講解工廠模式比new方法的優勢。
為什麼要用工廠模式來替代new?工廠模式相對於new方法有三個核心的好處:
1 可以讓產品類統一化入參。
#include #include using namespace std;
class abstractproduct
virtual ~abstractproduct() {}
virtual void print() = 0;
protected:
void *data;
};class productint : public abstractproduct
~productint() override
void print() override
};class productbool : public abstractproduct
~productbool() override
void print() override
};class productstring : public abstractproduct
~productstring() override
void print() override
};template class singleton
singleton(const singleton&) = delete;
singleton& operator=(const singleton&) = delete;
protected:
struct token{};
singleton() = default;
virtual ~singleton() = default;
};//工廠也是乙個單例
class factory : public singleton
~factory() = default;
factory(const factory&) = delete;
factory& operator=(const factory&) = delete;
abstractproduct* getproduct(int num)
abstractproduct* getproduct(bool b)
abstractproduct* getproduct(string str)
};int main()
2 一些操作(如:讀寫操作、資料庫操作、網路請求等)延時很高,但又需要在建構函式中呼叫,且呼叫一次後快取其內容,第二次直接讀取快取會很快。當然可以將這些函式和快取的內容提取成全域性變數,但是他們還有更好的去出,那就是存放在其工廠當中。
#include #include #include #include using namespace std;
//普通版本
class product01
private:
int i;
};//全域性版本
int dosomething()
class product02
private:
int i;
};//工廠模式版本
template class singleton
singleton(const singleton&) = delete;
singleton& operator=(const singleton&) = delete;
protected:
struct token{};
singleton() = default;
virtual ~singleton() = default;
};//工廠也是乙個單例
class factory : public singleton
~factory() = default;
factory(const factory&) = delete;
factory& operator=(const factory&) = delete;
//本案例省略抽象產品和其他產品
product02* getproduct()
private:
int i;
int dosomething()
};int main()
//全域性版本
int g_i = dosomething();
for (int i = 0; i < 3; ++i)
//工廠版本
factory &f = factory::getinstance();
for (int i = 0; i < 3; ++i)
return 0;
}
3 工廠方法可以對產品資源進行統一管理。比如:產品的迴圈利用。
#include #include using namespace std;
class product
~product()
//字首--過載
product& operator--()
void print()
int get()
void set(int num)
private:
int data;
};template class singleton
singleton(const singleton&) = delete;
singleton& operator=(const singleton&) = delete;
protected:
struct token{};
singleton() = default;
virtual ~singleton() = default;
};//工廠也是乙個單例
class factory : public singleton
//負責資源管理,需要釋放v中的產品
~factory() override
}factory(const factory&) = delete;
factory& operator=(const factory&) = delete;
product* getproduct(int num)
}//沒有廢棄產品。
product *ret = new product(num);
v.emplace_back(ret);
return ret;
}private:
vectorv;
};int main()
輸出:
construct data = 1
data = 0
recycle product
data = 1
construct data = 2
destroy
destroy
工廠模式與簡單工廠模式的區別
介面類 public inte ce icompany實現類a public class alibabacompany implements icompany 實現類b 實現類c public class huaweicompany implements icompany 工廠類 簡單工廠模式 也叫...
設計模式 工廠模式與抽象工廠模式的區別
首先來看看這兩者的定義區別 工廠模式 定義乙個用於建立物件的藉口,讓子類決定例項化哪乙個類 抽象工廠模式 為建立一組相關或相互依賴的物件提供乙個介面,而且無需指定他們的具體類 個人覺得這個區別在於產品,如果產品單一,最合適用工廠模式,但是如果有多個業務品種 業務分類時,通過抽象工廠模式產生需要的物件...
設計模式 簡單工廠模式與工廠生產模式的區別
參考 螞蟻課堂 先實戰再總結,基於車的兩個品牌 奧迪和賓士 實現工廠模式和簡單工廠 1.都屬於汽車,建立汽車介面 public inte ce car2.奧迪實現car介面 public class aodi implements car 3.賓士實現car介面 public class bench...