文章相关代码与图片均在:github
目录
一、目的
提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们具体的类
二、例子
你是一个笔记本商家,现在在出售华为与戴尔笔记本电脑(假设每种品牌只有一种产品)每个商品由充电器与笔记本本体组成,你有华为库房与戴尔库房分别存放这些商品,每卖出一个产品只需要去对应库房拿出充电器和笔记本就可以了,不需要在意实际品牌。
在上面这个例子中
华为库房与戴尔库房是具体工厂
库房是抽象工厂
戴尔充电器、华为充电器、戴尔笔记本、华为笔记本是具体产品
充电器与笔记本是抽象产品
三、抽象工厂模式UML图
例子的关系图如下
四、Java代码示例
1.库房(抽象工厂)
/**
* 库房(抽象工厂)
*/
public abstract class StorageFactory {
//获取充电器
public abstract Charger createCharger();
//获取笔记本
public abstract NoteBook createNoteBook();
}
2.戴尔库房(具体工厂)
具体工厂应该继承抽象工厂并实现抽象方法,这里继承了之前的抽象工厂StorageFactory。
/**
* 戴尔库房(具体工厂)
*/
public class DellStorageFactory extends StorageFactory {
/**
* 获得戴尔充电器
* @return
*/
public Charger createCharger() {
return new DellCharger();
}
/**
* 获得戴尔笔记本
* @return
*/
public NoteBook createNoteBook() {
return new DellNoteBook();
}
}
3.华为库房(具体工厂)
/**
* 华为库房(具体工厂)
*/
public class HuaWeiStorageFactory extends StorageFactory {
/**
* 获得华为充电器
* @return
*/
public Charger createCharger() {
return n