一 抽象工厂模式理解
实验代码地址:https://github.com/allhuo/deepin-java.git
本文实验代码:
模块名:chapter_001
包名:com.lizhangjun.part04
工厂以及工厂产生的对象都基于抽象之上,对调用者屏蔽实现细节。
下面,通过富士康电脑生产线来模拟抽象工厂模式。需生产不同型号的戴尔和苹果电脑,基本信息如下:
型号 | CPU | 内存 | 操作系统 |
戴尔A型号 | 酷睿i3 | 4GB | windows10 |
戴尔B型号 | 酷睿i5 | 8GB | windows10 |
苹果A型号 | 酷睿i5 | 8GB | 苹果 |
苹果B型号 | 酷睿i7 | 16GB | 苹果 |
1.1 分别抽象两种品牌的电脑
public abstract class AbstractDellComputer {
/**
* 电脑cpu
*/
abstract void getCpu();
/**
* 电脑内存
*/
abstract void getCache();
/**
* 电脑操作系统
*/
void getOS(){
System.out.println("预装windows10操作系统");
}
}
public abstract class AbstractMacComputer {
/**
* 电脑cpu
*/
abstract void getCpu();
/**
* 电脑内存
*/
abstract void getCache();
/**
* 电脑操作系统
*/
void getOS(){
System.out.println("预装苹果操作系统");
}
}
1.2 产品的具体实现
/**
* 戴尔A型电脑
*/
public class DellComputerA extends AbstractDellComputer {
@Override
void getCpu() {
System.out.println("酷睿i3CPU");
}
@Override
void getCache() {
System.out.println("4GB内存");
}
}
/**
* 戴尔A型电脑
*/
public class DellComputerB extends AbstractDellComputer {
@Override
void getCpu() {
System.out.println("酷睿i5CPU");
}
@Override
void getCache() {
System.out.println("8GB内存");
}
}
苹果电脑的实现与此类似。
1.3 抽象富士康两条不同品牌的电脑生产线
/**
* 抽象工厂
*/
public abstract class AbstractComputerFactory {
//生产戴尔电脑
public abstract AbstractDellComputer createDellComputer();
//生产苹果电脑
public abstract AbstractMacComputer createMacComputer();
}
1.4 抽象生产线具体实现
public class AComputerFactory extends AbstractComputerFactory{
@Override
public AbstractDellComputer createDellComputer() {
return new DellComputerA();
}
@Override
public AbstractMacComputer createMacComputer() {
return new MacComputerA();
}
}
public class BComputerFactory extends AbstractComputerFactory{
@Override
public AbstractDellComputer createDellComputer() {
return new DellComputerB();
}
@Override
public AbstractMacComputer createMacComputer() {
return new MacComputerB();
}
}
1.5 车间负责人按需要生产不同产品
/**
* 泛型
*/
public class Worker {
public static void main(String[] args) {
//定义两条生产线
AComputerFactory aComputerFactory = new AComputerFactory();
BComputerFactory bComputerFactory = new BComputerFactory();
//生产戴尔A型电脑
aComputerFactory.createDellComputer();
//生产苹果A型电脑
aComputerFactory.createMacComputer();
//生产戴尔B型电脑
bComputerFactory.createDellComputer();
//生产苹果B型电脑
bComputerFactory.createMacComputer();
}
}
二 抽象工厂模式程序结构图