java设计模式之抽象工厂模式
1.定义
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
2.意识图
3.示意代码
各个电脑生产商生产的电脑的CPU和显卡都不太一样
1).cpu接口
/**
* CPU接口
* wuyanlin2016@163.com
*2017年12月25日
*/
public interface CPU {
/**
* cpu具有计算能力
*/
public void calculate();
}
2).cpu实现类-->AMD
/**
*amd a8的cpu
* wuyanlin2016@163.com
*2017年12月25日
*/
public class AMDCpuA8 implements CPU {
@Override
public void calculate() {
System.out.println("this is amd a8 calculate");
}
}
3).cpu实现类-->Inter
/**
* inter i5的cpu
* wuyanlin2016@163.com
*2017年12月25日
*/
public class InterCpui5 implements CPU {
@Override
public void calculate() {
System.out.println("this is inter i5 calculate");
}
}
4).显卡接口
/**
* 显卡
* wuyanlin2016@163.com
*2017年12月25日
*/
public interface VC {
/**
* 显卡具有转换的功能
*/
public void transform();
}
5).显卡实现类-->AMD
/**
* AMD a8的 显卡
* wuyanlin2016@163.com
*2017年12月25日
*/
public class AMDVCA8 implements VC {
@Override
public void transform() {
System.out.println("this is a8 transform");
}
}
6).显卡实现类-->Inter
/**
* inter i5 的集显
* wuyanlin2016@163.com
*2017年12月25日
*/
public class InterVCi5 implements VC {
@Override
public void transform() {
System.out.println("this is i5 transform");
}
}
7).PC抽象工厂类
/**
* 抽象PC类
* wuyanlin2016@163.com
*2017年12月25日
*/
public abstract class PCAbstractFactoy {
//构建CPU
public abstract CPU buildCPU();
//构建video card
public abstract VC buildVC();
}
8).Dell工厂类
/**
* 戴尔工厂类
* wuyanlin2016@163.com
*2017年12月25日
*/
public class DellFactory extends PCAbstractFactoy {
@Override
public CPU buildCPU() {
return new AMDCpuA8();
}
@Override
public VC buildVC() {
return new AMDVCA8();
}
}
9).Lenovo工厂类
/**
* 联想工厂
* wuyanlin2016@163.com
*2017年12月25日
*/
public class LenovoFactory extends PCAbstractFactoy {
@Override
public CPU buildCPU() {
return new InterCpui5();
}
@Override
public VC buildVC() {
return new InterVCi5();
}
}
10).客户端类
/**
* 客户端类
* wuyanlin2016@163.com
*2017年12月25日
*/
public class Client {
public static void main(String[] args) {
DellFactory dellFactory = new DellFactory();
//戴尔电脑CPU
CPU dellCpu = dellFactory.buildCPU();
//戴尔电脑显卡
VC dellVC = dellFactory.buildVC();
dellCpu.calculate();
dellVC.transform();
LenovoFactory lenovoFactory = new LenovoFactory();
//联想电脑的CPU
CPU lenovoCpu = lenovoFactory.buildCPU();
//联想电脑的显卡
VC lenovoVC = lenovoFactory.buildVC();
lenovoCpu.calculate();
lenovoVC.transform();
}
}
11).结果
this is amd a8 calculate
this is a8 transform
this is inter i5 calculate
this is i5 transform
4.总结
何时选用?
1).只知道产品的接口,而不关心产品的实现
2).一套产品有多种实现方式,动态切换产品线
3).联合使用一系列产品接口