一、抽象工厂模式涉及角色
1、AbstractFactory:声明一个创建抽象产品对象的接口;
2、ConcreteFactory:实现创建具体产品的操作,实现了抽象工厂接口 || 继承了抽象产品父类;
3、AbstractProduct:为一类产品对象声明一个接口;
4、ConcreteProduct:定义一个将被具体工厂创建的产品对象,实现了抽象产品接口 || 继承了抽象产品父类;
5、Client:仅使用抽象产品和抽象工厂类声明的接口。
二、使用场景和说明
1、一个系统要独立于它的产品的创建、组装和表示时;
2、一个系统要由多个产品系列中的一个来配置时,即有多个产品等级时候,针对一个产品族。
3、要强调一系列相关的产品对象的设计以便进行联合使用时;
4、当你提供一个产品类库,而只是想显示他们的接口而不是实现时;
5、抽象工厂模式的缺点:产品族扩展比较困难,而不是产品等级。
三、代码示例
public abstract class CPU {
public abstract void createCpu();
public abstract void createCpu();
}
public class CPUA1
extends CPU {
@Override
public void createCpu() {
System. out.println( "制造A1型号的CPU");
}
@Override
public void createCpu() {
System. out.println( "制造A1型号的CPU");
}
}
public class CPUA2
extends CPU {
@Override
public void createCpu() {
System. out.println( "制造A2型号的CPU");
}
@Override
public void createCpu() {
System. out.println( "制造A2型号的CPU");
}
}
public abstract class Display {
public abstract void createDispalyer();
public abstract void createDispalyer();
}
public class DisplayA1
extends Display {
@Override
public void createDispalyer() {
System. out.println( "制造A1型号的显示器");
}
@Override
public void createDispalyer() {
System. out.println( "制造A1型号的显示器");
}
}
public class DisplayA2
extends Display {
@Override
public void createDispalyer() {
System. out.println( "制造A2型号的显示器");
}
@Override
public void createDispalyer() {
System. out.println( "制造A2型号的显示器");
}
}
public abstract class ComCreater {
public abstract CPU createCPU();
public abstract Display createDisplay();
public abstract CPU createCPU();
public abstract Display createDisplay();
}
public class CreateComA1
extends ComCreater {
@Override
public CPU createCPU() {
return new CPUA1();
}
@Override
public Display createDisplay() {
return new DisplayA1();
}
@Override
public CPU createCPU() {
return new CPUA1();
}
@Override
public Display createDisplay() {
return new DisplayA1();
}
}
public class CreateComA2
extends ComCreater {
@Override
public CPU createCPU() {
return new CPUA2();
}
@Override
public Display createDisplay() {
return new DisplayA2();
}
@Override
public CPU createCPU() {
return new CPUA2();
}
@Override
public Display createDisplay() {
return new DisplayA2();
}
}
public class ClientTest {
public static void main(String args[]) {
ComCreater createA1 = new CreateComA1();
ComCreater createA2 = new CreateComA2();
//制造型号为A1的电脑
CPU cpua1 = createA1.createCPU();
Display displayA1 = createA1.createDisplay();
cpua1.createCpu();
displayA1.createDispalyer();
//制造型号为A2的电脑
CPU cpua2 = createA2.createCPU();
Display displayA2 = createA2.createDisplay();
cpua2.createCpu();
displayA2.createDispalyer();
}
}
public static void main(String args[]) {
ComCreater createA1 = new CreateComA1();
ComCreater createA2 = new CreateComA2();
//制造型号为A1的电脑
CPU cpua1 = createA1.createCPU();
Display displayA1 = createA1.createDisplay();
cpua1.createCpu();
displayA1.createDispalyer();
//制造型号为A2的电脑
CPU cpua2 = createA2.createCPU();
Display displayA2 = createA2.createDisplay();
cpua2.createCpu();
displayA2.createDispalyer();
}
}