目录
一、 抽象工厂
用于生成指定产品族,一个产品族中包括多种产品。例如:
我们都比较熟悉的电脑制造相关行业,有HP,罗技,联想,戴尔,近几年华为,小米也进来了,每个生产商生产的电脑又包括鼠标,键盘,屏幕等等配件。此时我们需要使用工厂模式来进行管理不同的产品族,这时使用简单工厂(也有叫作工厂方法的)已经无法满足要求,此时可以使用抽象工厂。
类图:
具体代码:
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(惠普)工厂
public class HpFactory extends PcFactory {
//返回抽象类:面向抽象编程代替面向具体编程
@Override
public Mouse makeMouse() {
return new HpMouse();
}
@Override
public Keyboard makeKeyboard() {
return new HpKeyboard();
}
}
LogicFactory(罗技)子工厂(继承抽象类PcFactory)
public class LogicFactory extends PcFactory {
@Override
public Mouse makeMouse() {
return new LogicMouse();
}
@Override
public Keyboard makeKeyboard() {
return new LogicKeyboard();
}
}
鼠标抽象工厂Keyboard
public abstract class Keyboard {
abstract String getInfo();
}
Hpkeyboard(HP的键盘制作工厂)
public class HpKeyboard extends Keyboard {
@Override
String getInfo() {
return "HP keyboard";
}
}
LogicKeyboard(Logic的键盘制作工厂)
public class LogicKeyboard extends Keyboard {
@Override
String getInfo() {
return "logic keyboard";
}
}
键盘抽象工厂Mouse
public