欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    單工廠模式(Simple Factory Pattern)
    工廠方法模式(Factory Method Pattern)
    抽象工廠模式(Abstract Factory Pattern)
    它們是三種與對象創建相關的設計模式,都屬于創建型模式,用于將對象的創建過程與使用過程分離,以提高代碼的可維護性和靈活性。下面對這三個模式進行講解:

    1. 簡單工廠模式
    (Simple Factory Pattern)

    概念

    簡單工廠模式由一個工廠類負責創建對象,根據參數決定要創建的具體類的實例。雖然它不是23種經典設計模式之一,但在實踐中非常常用。

    特點

    • 工廠類:一個工廠類包含一個靜態方法,根據傳入的參數來決定創建哪種具體產品對象。
    • 客戶端:客戶端只需要知道要創建的對象類型的參數,而不需要關心具體的創建過程。

    示例

    // 產品接口
    interface Product {
        void use();
    }
    
    // 具體產品A
    class ProductA implements Product {
        public void use() {
            System.out.println("Using Product A");
        }
    }
    
    // 具體產品B
    class ProductB implements Product {
        public void use() {
            System.out.println("Using Product B");
        }
    }
    
    // 簡單工廠類
    class SimpleFactory {
        public static Product createProduct(String type) {
            if (type.equals("A")) {
                return new ProductA();
            } else if (type.equals("B")) {
                return new ProductB();
            } else {
                throw new IllegalArgumentException("Unknown product type");
            }
        }
    }
    
    // 客戶端
    public class Client {
        public static void main(String[] args) {
            Product product=SimpleFactory.createProduct("A");
            product.use(); // 輸出: Using Product A
        }
    }
    

    優點

    • 客戶端代碼簡單,只需要知道產品的類型參數。
    • 工廠類封裝了對象創建的邏輯,客戶端與具體產品的創建過程解耦。

    缺點

    • 當增加新的產品時,需要修改工廠類,違背了開閉原則。
    • 工廠類可能會變得過于復雜,難以維護。

    2. 工廠方法模式
    (Factory Method Pattern)

    概念

    工廠方法模式通過定義一個創建對象的接口,由子類決定實例化哪一個類。工廠方法將對象的創建延遲到子類。

    特點

    • 工廠接口或抽象類:定義一個創建產品對象的接口或抽象方法。
    • 具體工廠類:子類實現具體的產品創建邏輯。
    • 客戶端:通過調用工廠方法獲取產品對象,客戶端不直接依賴具體產品類。

    示例

    // 產品接口
    interface Product {
        void use();
    }
    
    // 具體產品A
    class ProductA implements Product {
        public void use() {
            System.out.println("Using Product A");
        }
    }
    
    // 具體產品B
    class ProductB implements Product {
        public void use() {
            System.out.println("Using Product B");
        }
    }
    
    // 工廠接口
    interface Factory {
        Product createProduct();
    }
    
    // 具體工廠A
    class FactoryA implements Factory {
        public Product createProduct() {
            return new ProductA();
        }
    }
    
    // 具體工廠B
    class FactoryB implements Factory {
        public Product createProduct() {
            return new ProductB();
        }
    }
    
    // 客戶端
    public class Client {
        public static void main(String[] args) {
            Factory factory=new FactoryA();
            Product product=factory.createProduct();
            product.use(); // 輸出: Using Product A
        }
    }
    

    優點

    • 遵循開閉原則,增加新產品時只需要增加新的具體工廠類,不需要修改現有代碼。
    • 客戶端通過工廠接口進行創建,依賴抽象而不依賴具體類,增強了代碼的靈活性。

    缺點

    • 可能會導致類的數量增多,增加系統的復雜性。

    3. 抽象工廠模式
    (Abstract Factory Pattern)

    概念

    抽象工廠模式提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們的具體類。它是一種在多個產品等級結構中擴展的工廠方法模式。

    特點

    • 抽象工廠接口:定義多個創建不同產品類型的方法。
    • 具體工廠類:每個具體工廠類負責創建一組相關的產品。
    • 抽象產品接口:定義產品的公共接口,每個產品等級結構都要實現這個接口。

    示例

    // 抽象產品A
    interface ProductA {
        void use();
    }
    
    // 抽象產品B
    interface ProductB {
        void operate();
    }
    
    // 具體產品A1
    class ProductA1 implements ProductA {
        public void use() {
            System.out.println("Using Product A1");
        }
    }
    
    // 具體產品A2
    class ProductA2 implements ProductA {
        public void use() {
            System.out.println("Using Product A2");
        }
    }
    
    // 具體產品B1
    class ProductB1 implements ProductB {
        public void operate() {
            System.out.println("Operating Product B1");
        }
    }
    
    // 具體產品B2
    class ProductB2 implements ProductB {
        public void operate() {
            System.out.println("Operating Product B2");
        }
    }
    
    // 抽象工廠接口
    interface AbstractFactory {
        ProductA createProductA();
        ProductB createProductB();
    }
    
    // 具體工廠1
    class ConcreteFactory1 implements AbstractFactory {
        public ProductA createProductA() {
            return new ProductA1();
        }
    
        public ProductB createProductB() {
            return new ProductB1();
        }
    }
    
    // 具體工廠2
    class ConcreteFactory2 implements AbstractFactory {
        public ProductA createProductA() {
            return new ProductA2();
        }
    
        public ProductB createProductB() {
            return new ProductB2();
        }
    }
    
    // 客戶端
    public class Client {
        public static void main(String[] args) {
            AbstractFactory factory=new ConcreteFactory1();
            ProductA productA=factory.createProductA();
            ProductB productB=factory.createProductB();
            productA.use(); // 輸出: Using Product A1
            productB.operate(); // 輸出: Operating Product B1
        }
    }
    

    優點

    • 易于交換產品系列:客戶端可以無縫切換到另一個產品系列,因為客戶端是面向抽象的。
    • 保證產品的一致性:抽象工廠會確保同一系列的產品一起使用,避免出現產品不兼容的情況。

    缺點

    • 增加新產品系列時,所有相關的工廠類都需要修改,違反了開閉原則。

    總結

    • 簡單工廠模式:通過一個工廠類來決定創建哪種產品,適用于產品類型較少的簡單場景。
    • 工廠方法模式:通過創建工廠接口和具體工廠類,適用于有多個產品類型的場景,并且易于擴展新的產品類型。
    • 抽象工廠模式:通過一個工廠接口創建一系列相關的產品,適用于需要生成一系列相關產品的場景,保證產品族的完整性和一致性。

    方定義

    工廠方法模式,又稱工廠模式、多態工廠模式和虛擬構造器模式,通過定義工廠父類負責定義創建對象的公共接口,而子類則負責生成具體的對象。

    UML圖

    實現代碼

    假設你正在做跨平臺的UI設計,需要在Windows、Linux平臺使用。后續可能還會添加其他應用平臺。在設計UI控件時候就可以采用工廠方法模式。基礎對話框Dialog類使用不同的 UI 組件渲染窗口。 在不同的操作系統下, 這些組件外觀或許略有不同, 但其功能保持一致。 Windows 系統中的按鈕在 Linux 系統中仍然是按鈕。

    //抽象基類-按鈕
    class Button {
    public:
    	virtual ~Button(){}
    	//渲染
    	virtual void render()=0;
    	//點擊
    	virtual void onClicked()=0;
    };
    
    //Windows平臺的按鈕
    class WindowsButton : public Button {
    public:
    	// 通過 Button 繼承
    	virtual void render() override
    	{
    		cout << "WindowsButton渲染完成" << endl;
    	}
    	virtual void onClicked() override
    	{
    		cout << "WindowsButton鼠標點擊" << endl;
    	}
    };
    
    //Linux平臺的按鈕
    class LinuxButton : public Button {
    public:
    	// 通過 Button 繼承
    	virtual void render() override
    	{
    		cout << "LinuxButton渲染完成" << endl;
    	}
    	virtual void onClicked() override
    	{
    		cout << "LinuxButton鼠標點擊" << endl;
    	}
    };
    
    //抽象基類-對話框
    class Dialog {
    public:
    	virtual ~Dialog() {}
    	void buttonTest() {
    		Button* button=creatButton();
    		button->render();
    		button->onClicked();
    	}
    protected:
    	virtual Button* creatButton()=0;
    };
    
    class WindowsDialog: public Dialog {
    public:
    	// 通過 Dialog 繼承
    	virtual Button* creatButton() override
    	{
    		return new WindowsButton;
    	}
    };
    
    class LinuxDialog : public Dialog {
    public:
    	// 通過 Dialog 繼承
    	virtual Button* creatButton() override
    	{
    		return new LinuxButton;
    	}
    };
    
    int main(void) {
    	Dialog* windowDialog=new WindowsDialog;
    	windowDialog->buttonTest();
    	Dialog* linuxDialog=new LinuxDialog;
    	linuxDialog->buttonTest();
    	return 0;
    }

    輸出

    ,介紹

    簡單工廠模式(Simple Factory Pattern)是一種創建型設計模式,它專門定義一個類來負責創建其他類的實例。這種模式允許客戶端通過單一的接口創建多種類型的對象,而無需指定具體的類。簡單工廠模式的核心是一個工廠類,它包含了必要的邏輯來創建產品線中的產品對象。這些產品對象通常都具有共同的父類或接口。因為在簡單工廠模式中用于創建實例的方法是靜態(static)方法,因此簡單工廠模式又被稱為靜態工廠方法(Static Factory Method)模式

    二,簡單工廠模式結構組成

    抽象產品(Product)角色簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口。可以包含一些公共代碼。

    具體產品(Concrete Product)角色:是簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例。

    工廠(Creator)角色:工廠類是簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。工廠類的創建產品類的方法可以被外界直接調用,創建所需的產品對象。在工廠類中提供一個創建產品的工廠方法,該方法可以根據所傳入的參數不同創建不同的具體產品對象。客戶端只需調用工廠類的工廠方法并傳入相應的參數即可得到一個產品對象。

    UML類圖如下所示:

    三,簡單工廠模式優缺點

    優點

    • 簡化了客戶端代碼,因為客戶端不需要知道具體產品的創建細節。把一些初始化的工作放在具體產品中,減少創建過程中一些重復代碼,比如Java中,new完對象,然后set屬性值。
    • 提供了隱藏具體產品類的實現細節的能力,增強了系統的封裝性。
    • 通過控制產品的創建過程,可以防止隨意創建對象的情況發生。
    • 客戶端只要使用對象就好,不需要關心對象的創建。

    缺點

    • 工廠類可能變得龐大和復雜,尤其是當產品線很長時。
    • 增加了系統的類數量,可能導致理解和維護上的困難。
    • 不符合開閉原則,即當添加新產品時需要修改原有的工廠類代碼。

    四,簡單工廠模式使用場景

    簡單工廠模式適用于以下場景:

    • 當工廠類負責創建的對象比較少時。
    • 客戶端只知道傳入工廠類的參數,對于如何創建對象(邏輯)不關心。
    • 系統中的具體產品類較少,且不會頻繁變化。

    五,示例代碼

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有