日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式——工厂模式(一)

發布時間:2024/4/18 asp.net 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式——工厂模式(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 簡單工廠模式
        • 1.1模式動機
        • 1.2簡單工廠模式定義
        • 1.3簡單工廠模式要點及代碼示例
        • 1.4簡單工廠模式結構圖中包含角色
        • 1.5簡單工廠模式總結

簡單工廠模式

1.1模式動機

首先將需要創建的各種不同對象的相關代碼封裝到不同的類中,這些類稱為具體產品類,而將它們公共的代碼進行抽象和提取后封裝在一個抽象產品類中,每一個具體產品類都是抽象產品類的子類;然后提供一個工廠類用于創建各種產品,在工廠類中提供一個創建產品的工廠方法,該方法可以根據所傳入的參數不同創建不同的具體產品對象;客戶端只需調用工廠類的工廠方法并傳入相應的參數即可得到一個產品對象(工廠模式的動機)。

1.2簡單工廠模式定義

簡單工廠模式(Simple Factory Pattern):定義一個工廠類,它可以根據參數的不同返回不同類的實例,被創建的實例通常都具有共同的父類。因為在簡單工廠模式中用于創建實例的方法是靜態(static)方法,因此簡單工廠模式又被稱為靜態工廠方法(Static Factory Method)模式,它屬于類創建型模式。

1.3簡單工廠模式要點及代碼示例

當你需要什么,只需要傳入一個正確的參數,就可以獲取你所需要的對象,而無須知道其創建細節。簡單工廠模式結構比較簡單,其核心是工廠類的設計。


代碼示例

#include <iostream> #include <stdexcept> #include <cstddef> #include <string> #include <map>using namespace std;class BadShapeCreation : public logic_error { public:BadShapeCreation(string type):logic_error("Cannot create type " + type) {} };class Shape { public:virtual void draw() = 0;virtual void erase() = 0;virtual ~Shape() {}static Shape* factory(const string& type); };class Circle : public Shape {Circle() {}// Private constructorfriend class Shape; public:void draw(){cout << "Circle:draw" << endl;}void erase(){cout << "Circle::erase" << endl;}~Circle(){cout << "Circle::~Circle" << endl;} };class Square : public Shape {Square() {}friend class Shape; public:void draw(){cout << "Square::draw" << endl;}void erase(){cout << "Square::erase" << endl;}~Square(){cout << "Square::~Square" << endl;} };Shape* Shape::factory(const string& type) throw(BadShapeCreation) {if (type == "Circle") return new Circle;if (type == "Square") return new Square;throw BadShapeCreation(type); }class ShapeFactory {std::map<string, Shape*> shapes; public:ShapeFactory(string str[], int n){for (int i = 0; i < n; ++i){shapes.insert(std::map<string, Shape*>::value_type(str[i], Shape::factory(str[i])));}}~ShapeFactory() {for (auto& x : shapes){}}Shape* GetShape(const string str){return shapes[str];} };int main() {string sname;string str[] = { "Circle ", "Square" };int n = sizeof(str) / sizeof(str[0]);ShapeFactory sfact(str, n);Shape* sp = nullptr;cin >> sname;sp = sfact.GetShape(sname);sp->draw();return 0; }

1.4簡單工廠模式結構圖中包含角色

  • Factory(工廠角色)∶工廠角色即工廠類,它是簡單工廠模式的核心,負責實現創建所有產品實例的內部邏輯;工廠類可以被外界直接調用,創建所需的產品對象;
    在工廠類中提供了靜態的工廠方法factoryMethod(),它的返回類型為抽象產品類型Product。

  • Product(抽象產品角色)︰它是工廠類所創建的所有對象的父類,封裝了各種產品對象的公有方法,它的引入將提高系統的靈活性,使得在工廠類中只需定義一個通用的工廠方法,因為所有創建的具體產品對象都是其子類對象。

  • ConcreteProduct(具體產品角色)∶它是簡單工廠模式的創建目標,所有被創建的對象都充當這個角色的某個具體類的實例。每一個具體產品角色都繼承了抽象產品角色,需要實現在抽象產品中聲明的抽象方法。

在簡單工廠模式中,客戶端通過工廠類來創建一個產品類的實例,而無須直接使用new關鍵字來創建對象,它是工廠模式家族中最簡單的一員。

1.5簡單工廠模式總結

簡單工廠模式提供了專門的工廠類用于創建對象,將對象的創建和對象的使用分離開,它作為一種最簡單的工廠模式在軟件開發中得到了較為廣泛的應用。

  • 簡單工廠模式的優點如下:
    (1) 工廠類包含必要的判斷邏輯,可以決定在什么時候創建哪一個產品類的實例,客戶端可以免除直接創建產品對象的職責,而僅僅“消費”產品,簡單工廠模式實現了對象創建和使用的分離。
    (2) 客戶端無須知道所創建的具體產品類的類名,只需要知道具體產品類所對應的參數即可,對于一些復雜的類名,通過簡單工廠模式可以在一定程度減少使用者的記憶量。
    (3) 通過引入配置文件,可以在不修改任何客戶端代碼的情況下更換和增加新的具體產品類,在一定程度上提高了系統的靈活性。
  • 簡單工廠模式的缺點如下:
    (1) 由于工廠類集中了所有產品的創建邏輯,職責過重,一旦不能正常工作,整個系統都要受到影響。
    (2) 使用簡單工廠模式勢必會增加系統中類的個數(引入了新的工廠類),增加了系統的復雜度和理解難度。
    (3) 系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,在產品類型較多時,有可能造成工廠邏輯過于復雜,不利于系統的擴展和維護。
    (4) 簡單工廠模式由于使用了靜態工廠方法,造成工廠角色無法形成基于繼承的等級結構。
  • 適用場景
    在以下情況下可以考慮使用簡單工廠模式:
    (1) 工廠類負責創建的對象比較少,由于創建的對象較少,不會造成工廠方法中的業務邏輯太過復雜。
    (2) 客戶端只知道傳入工廠類的參數,對于如何創建對象并不關心。

總結

以上是生活随笔為你收集整理的设计模式——工厂模式(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。