設計模式 工廠方法模式

2021-08-08 17:05:06 字數 1705 閱讀 1341

第一節我更新了簡單工廠模式,特點就是實現了物件建立與客戶端的分離,在建立物件的時候,我們只需要傳入引數,就能獲取到相應的物件。但是,簡單工廠模式也有侷限,它只能用於建立的物件比較少的情況

現在有這麼一種情況,如果我想增加乙個產品,那是不是就得修改工廠類裡面的**,我得在裡面多加乙個判斷,如果符合這個引數,就生成相應的物件。

product product1;

product product2;

product1 = factory.getproduct("one");

product2 = factory.getproduct("tow");d

這樣我們傳入不同的引數,就獲取到了不同的物件,這得益於我們把物件建立都放在了這個factory工廠類中。但這也有侷限,一旦我們想要新增產品,就必須「修改」factory的static方法(new object),那有沒有什麼辦法來解決呢?有,我們公升級一下,用工廠方法模式。

工廠方法模式:定義乙個用於建立物件的介面,讓子類決定將哪乙個類例項化。與簡單工廠模式相同,工廠方法模式也把乙個類的例項化延遲到其子類。

其實一張圖勝千言。

//抽象工廠

abstract class factory

//抽象產品

abstract class product

//工廠one(用於生產產品one)

public class onefactory extends factory

}//工廠two(用於生產產品two)

public class tnefactory extends factory

}//產品one

public class oneproduct extends product

}//產品two

public class twoproduct extends product

}//main

factory factory = new onefactory();

product product = factory.factorymethod();

product.printproduct();

我們之前學簡單工廠模式的時候,是傳入引數,根據引數動態的去選擇建立的物件。產品子類越來越多我們就難以去記住各個子類的名字,那我們上面這個例子又碰到了相同的問題。

在main方法裡面,我們總是得去new 子類(); 那有沒有什麼辦法解決呢?有的,我們可以先寫乙個配置文件,在這個文件裡面存放所要生成的子類名。然後去獲取這個配置文件裡面的資料,動態的生成不同的物件。

對比之前的簡單工廠方法,我們有了哪些優點?

在增加乙個新產品的時候,我們不需要修改工廠類,我們只需要增加乙個工廠類、產品類,不需要修改工廠介面和產品介面;

多型設計使我們的工廠可以自主確定建立的產品物件;

使用者無需關心建立的細節。

我們不斷的新增產品,就需要不斷的增加產品類和工廠類,這樣我們就會增加複雜度;

工廠方法模式想要按照傳入的引數去動態的建立物件,就需要引用一些工具類來進行處理,增加了系統的實現難度。

2017/9/24 21:01:13 @author:cloudking(雲都小生)

設計模式 工廠方法模式

一 工廠方法 factory method 模式 工廠方法模式的意義是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到工廠子類當中。核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角...

設計模式 工廠方法模式

1 factorymethod.h ifndef factorymethod h define factorymethod h include include using namespace std class osproduct 產品,product,產品的抽象類 class windowspro...

設計模式 工廠方法模式

框架的基礎知識 對框架的理解 框架和設計模式的關係 工廠方法模式 定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,factory method使乙個類的例項化延遲到其子類。結構 產品 public inte ce product 具體產品 public class productimpl...