設計模式初級 03 抽象工廠模式

2021-10-02 10:10:40 字數 3413 閱讀 5455

一、定義

抽象工廠模式是利用乙個超級工廠來建立其他工廠。該設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。

在抽象工廠模式中,介面是負責建立乙個生成別的物件的工廠,而不是生產指定的類。每個生成物件的工廠都按照工廠模式提供物件。

二、詳細介紹

解決問題:主要解決介面選擇的問題。

使用場景:系統的產品有多於乙個的產品族,而系統只消費其中某一族的產品。

解決方式:在乙個產品族裡面,定義多個產品。

優點:當乙個產品族中的多個物件被設計成一起工作時,它能保證客戶端始終只使用同乙個產品族中的物件。

缺點:產品族擴充套件非常困難,要增加乙個系列的某一產品,既要在抽象的 creator 裡加**,又要在具體的裡面加**。

應用例項:1、qq 換**,一整套一起換。 2、生成不同作業系統的程式。

三、實現

1、建立繪製形狀的介面

/**

* desc: 建立形狀的介面

* author: [email protected]

* date: 2020/01/20

*/public inte***ce shape

2、建立實現繪製形狀介面的實現類

/**

* desc: 畫圓實體類

* @author guodandan

* @date 2020/1/18 16:58

*/public class circle implements shape

}/**

* desc: 畫方實體類

* @author guodandan

* @date 2020/1/18 16:56

*/public class rectangle implements shape

}

3、建立設定顏色的介面

/**

* desc: 設定顏色介面

* author: [email protected]

* date: 2020/01/25

*/public inte***ce color

4、建立設定不同顏色的實現類

/**

* desc: 設定顏色為紅色

* author: [email protected]

* date: 2020/01/25

*/public class red implements color

}/**

* desc: 設定顏色為綠色

* author: [email protected]

* date: 2020/01/25

*/public class green implements color

}

5、為 color 和 shape 物件建立抽象類來獲取工廠

/**

* desc: 抽象工廠

* author: [email protected]

* date: 2020/01/20

*/public abstract class abstractfactory

6、建立擴充套件了 abstractfactory 的工廠類,基於給定的資訊生成實體類的物件

/**

* desc: 抽象工廠實現類,實現顏色工廠物件的建立

* author: [email protected]

* date: 2020/01/25

*/public class colo***ctory extends abstractfactory catch (instantiationexception e) catch (illegalacces***ception e)

return null;

}/**

* 通過反射,利用工廠模式實現目標實現類。

* 優點: 每次增加新的例項物件,不需要修改工廠方法,擴充套件性好

* @param clazz 目標類class

* @return 目標類

*/@override

public shape getshape(class extends shape> clazz)

}package net.cxyk.ch02_asbfactory;

/** * desc: 抽象工廠實現類,實現畫圖工廠物件的建立

* author: [email protected]

* date: 2020/01/25

*/public class shapefactory extends abstractfactory

/*** 通過反射,利用工廠模式實現目標實現類。

* 優點: 每次增加新的例項物件,不需要修改工廠方法,擴充套件性好

* @param clazz 目標類class

* @return 目標類

*/@override

public shape getshape(class extends shape> clazz) catch (instantiationexception e) catch (illegalacces***ception e)

return null;}}

7、建立乙個工廠創造器/生成器類,通過傳遞形狀或顏色資訊來獲取工廠

/**

* desc: 建立乙個工廠創造器/生成器類,通過傳遞形狀或顏色資訊來獲取工廠。

* author: [email protected]

* date: 2020/01/26

*/public class factoryproducer catch (instantiationexception e) catch (illegalacces***ception e)

return null;}}

8、測試類

import org.junit.test;

/** * desc:

* author: [email protected]

* date: 2020/01/26

*/public class testabstractfactory

}

9、測試結果

設計模式03 抽象工廠

抽象工廠使用抽象類 或者介面 來定義某一類工廠的行為。uml圖如下 適用orangefoodfactory來建立橙色的食物 public class orangefoodfactory implements abstractfactory override public vegetables get...

設計模式學習03 抽象工廠模式

1 動機與定義 工廠模式中,乙個工廠僅僅能提供乙個或一類產品,當產品種類較多,形成產品系列 比方我們要建立跨平台的button,選單,文字框等等一系列gui控制項 單純使用工廠模式會產生大量工廠,並且後期維護也不方便,我們能夠從產品中找到規律,假設產品等級相對固定,以後僅僅會新增產品族,那麼我們就能...

初級 設計模式 工廠模式

所有工廠模式都是為了讓物件的呼叫者和物件建立過程分離,簡化呼叫端 便於維護 簡單地物件建立則不需要使用工廠模式 簡單工廠 靜態工廠 1 建立產品介面 2 建立工廠類 3 工廠類通過傳入引數的不同返回不同的產品 優點 1 呼叫簡單,類之間的關係也較簡單 缺點 1 拓展性稍差,如果需要增加新的產品,則需...