一、定義
抽象工廠模式是利用乙個超級工廠來建立其他工廠。該設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。
在抽象工廠模式中,介面是負責建立乙個生成別的物件的工廠,而不是生產指定的類。每個生成物件的工廠都按照工廠模式提供物件。
二、詳細介紹
解決問題:主要解決介面選擇的問題。
使用場景:系統的產品有多於乙個的產品族,而系統只消費其中某一族的產品。
解決方式:在乙個產品族裡面,定義多個產品。
優點:當乙個產品族中的多個物件被設計成一起工作時,它能保證客戶端始終只使用同乙個產品族中的物件。
缺點:產品族擴充套件非常困難,要增加乙個系列的某一產品,既要在抽象的 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 拓展性稍差,如果需要增加新的產品,則需...