抽象工厂
概念
用于生成指定产品族,一个产品族中包括多种产品。例如:
我们都比较熟悉的电脑制造相关行业,有HP,罗技,联想,戴尔,近几年华为,小米也进来了,每个生产商生产的电脑又包括鼠标,键盘,屏幕等等配件。此时我们需要使用工厂模式来进行管理不同的产品族,这时使用简单工厂(也有叫作工厂方法的)已经无法满足要求,此时可以使用抽象工厂。
类图
从图中可以看到:HPFactory(惠普)和LogicFactory(罗技)子工厂都继承PCFactory电脑产品族总抽象工厂,并具备了制作鼠标和制作键盘的方法,而鼠标抽象工厂Keyboard和键盘抽象工厂Mouse下的子类遵从单一职责原则,各自则负责各自品牌的鼠标或者键盘制作
简单来说,抽象工厂就是在简单工厂的基础上,对多个工厂进行抽象,将不同的工厂类型放入抽象工厂
代码
PcFactory抽象产品族工厂
public abstract class PcFactory {
//制作方法
public abstract Mouse makeMouse();
public abstract Keyboard makeKeyboard();
//为得到具体的工厂的方法服务
private static HpFactory hpFactory = new HpFactory();
private static LogicFactory logicFactory = new LogicFactory();
//为得到具体的工厂的方法服务
public final static int PC_TYPE_HP = 1;
public final static int PC_TYPE_LG = 2;
/**
* 得到具体的工厂的方法
* @param pcType传入表示电脑类型的常数
* @return 返回PcFactory抽象类:面向抽象编程代替面向具体编程
*/
public static PcFactory getPcFactory(int pcType) {
switch (pcType){
case 1:
return hpFactory;
case 2 :
return logicFactory;
default:
return null;
}
}
}
HPFactory(惠普)子工厂(继承抽象类PcFactory)
public class HpFactory extends PcFactory {
//返回抽象类:面向抽象编程代替面向具体编程
@Override
public Mouse makeMouse() {
return new HpMouse();
}
@Override
public Keyboard mak