淺談設計模式2

簡單工廠模式

簡單工廠模式並不屬於GoF的23種經典設計模式,但通常將它作為學習其他工廠模式的基礎。


下面我們通過一個類圖來簡單的認識一下簡單工廠模式

淺談設計模式2

簡單工廠模式

代碼實現

Product

public interface Product

{

void sayName();

}

ProductA

class ProductA : Product

{

public void sayName()

{

Console.WriteLine("我是A");

}

}

ProductB

class ProductB : Product

{

public void sayName()

{

Console.WriteLine("我是B");

}

}

ProductFactory

public class ProductFactory

{

public static Product getProductFactory(string name)

{

switch (name)

{

case "A": {

return new ProductA();

} break;

case "B": {

return new ProductB();

} break;

default:

{

return null;

}break;

}

}

}

使用方法

Product a = ProductFactory.getProductFactory("A");

a.sayName();

效果

淺談設計模式2

效果圖

過程解析

從上面的類圖和代碼可以看出,在簡單工廠模式中,我們可以抽取出三類角色:

  1. 抽象產品接口

  2. 產品的實體類

  3. 產品工廠類

抽象產品接口(Product):將產品的共同特徵抽象出來的一個接口,作為工廠類的創建方法的返回值,同時,各個產品實體類同樣需要實現這個接口;

產品實體類(ProductA):具體的產品實體類,是工廠的創建目標;

產品工廠類(ProductFactory):

簡單工廠模式的核心,負責實現創建實體類的具體業務邏輯,由外部調用創建所需要的實體類對象。

簡單工廠模式的適用環境

  1. 工廠類負責創建的對象較少

  2. 外部(客戶端)只需要知道需要傳入的參數,並不需要關心如何創建該對象


工廠方法模式

工廠方法模式是簡單工廠模式的延伸,下面,我們同樣通過一個類圖來先了解一下工廠方法模式

淺談設計模式2

工廠方法模式

代碼實現

Product

public interface Product

{

void sayName();

}

ProductA

class ProductA : Product

{

public void sayName()

{

Console.WriteLine("我是A");

}

}

ProductB

class ProductB : Product

{

public void sayName()

{

Console.WriteLine("我是B");

}

}

Factory

public interface Factory

{

Product getProduct();

}

ProductFactoryA

class ProductFactoryA : Factory

{

public Product getProduct()

{

return new ProductA();

}

}

ProductFactoryB

class ProductFactoryB : Factory

{

public Product getProduct()

{

return new ProductB();

}

}

調用

Factory a = new ProductFactoryA();

Product product = a.getProduct();

product.sayName();

效果

淺談設計模式2

工廠方法模式效果圖

過程解析

工廠方法模式相較於簡單工廠模式而言,從代碼量上看似乎更為複雜,但在下面這樣的情況中,工廠方法模式會更具優勢:

如果在現有A,B兩種產品的情況下,需要增加C這個產品

那麼在簡單工廠模式下,我們不僅需要增加一個產品類,還需要修改工廠類中getProduct方法的業務邏輯,那麼這樣的修改就會動到我們的源代碼;

如果使用工廠方法模式的話,就只需要增加一個產品類和工廠類就可以完成原功能的升級,不需要修改我們原本已經寫好的源代碼,這樣更利於程序的維護。

同樣是相當於簡單工廠模式來進行分析,工廠方法模式多出了一個角色:

適用環境

  1. 客戶端(調用者)不知道他所需要的對象的類

  2. 抽象工廠類通過其子類來指定創建那個對象


最後說幾句

這次教程中主要介紹了兩種設計模式(簡單工廠模式和工廠方法模式),通過這兩種模式,大家應該可以看出設計模式的優點。雖說在使用設計模式是有可能會增加程序的代碼量,但在維護和升級上而言,使用設計模式會更優。


分享到:


相關文章: