抽象工厂模式
定义:用于创建具有相同规律或产品层次的族的产品(类)的模式,定义创建这些类的抽象工厂,具体实现交由子类实现
简单说就是抽象工厂模式是用于定于产品族的创建的模式
看完感觉不错,麻烦点个赞,让我开心下
/**
* @ClassName ComputerFactory
* @Author 莫邪
* @Description TODO 抽象工厂接口:定义用于创建电脑系列的产品族(可以分为不同品牌下的电脑工厂)
* @Date Created in 23:52 2019/4/24
* @Version 1.0
*/
public interface ComputerFactory {
AbstractCpu createCpu();
AbstractMainBoard createMainBoard();
}
/**
* @ClassName AbstractCpu
* @Author 莫邪
* @Description TODO 某中类型产品的抽象,具有多种实现
* @Date Created in 23:58 2019/4/24
* @Version 1.0
*/
public abstract class AbstractCpu {
private int num ;
public AbstractCpu(int num){
this.num=num;
}
public int getNum() {
return num;
}
}
/**
* @ClassName AbstractBoss
* @Author 莫邪
* @Description TODO 抽象主板
* @Date Created in 23:59 2019/4/24
* @Version 1.0
*/
public abstract class AbstractMainBoard {
private int num;//主板的阵脚数
public AbstractMainBoard(int num){
this.num=num;
}
public int getNum() {
return num;
}
}
/**
* @ClassName Computer
* @Author 莫邪
* @Description TODO 电脑组合类用于提供服务,一般这些产品族会有一些共同的功能,可以封装一下
* @Date Created in 0:25 2019/4/25
* @Version 1.0
*/
public class Computer {
private AbstractMainBoard mainBoard;
private AbstractCpu cpu;
public Computer(AbstractMainBoard mainBoard, AbstractCpu cpu) {
this.mainBoard = mainBoard;
this.cpu = cpu;
}
private boolean load(){
//加载判断
if(cpu.getNum()==mainBoard.getNum()){
return true;
}
return false;
}
public void server(){
if(load()){
System.out.println("ok run");
}else{
System.out.println("mainboard is not adapter cpu");
}
}
}
重点来了—工厂的实现,这里只写了一个,可以有多种实现
/**
* @ClassName AbstractComputer
* @Author 莫邪
* @Description TODO 定义一个创建电脑配件的工厂。
* @Date Created in 23:56 2019/4/24
* @Version 1.0
*/
//每一个不同的ComputerFactory的实现就是一套方案,创建的CPU和MainBoard相互之间有关联关系,
// 他们之间得满足一定条件才能使用,抽象工厂模式就是提供这种产品(组件)的组合的一种方案。
public class DefaultComputerFactory implements ComputerFactory{
@Override
public AbstractCpu createCpu() {
return new AbstractCpu(100) {};//费事写实现类,用匿名类
}
@Override
public AbstractMainBoard createMainBoard() {
return new AbstractMainBoard(100) {};
}
}
/**
* @ClassName AbstractFactoryClient
* @Author 莫邪
* @Description TODO 抽象工厂的使用
* @Date Created in 0:31 2019/4/25
* @Version 1.0
*/
public class AbstractFactoryClient {
public static void main(String[] args) {
ComputerFactory factory = new DefaultComputerFactory();//这里可以使用简单工厂,通过配置决定,
//这里介绍抽象工厂就不混在一起了,简单工厂在这个专栏里有
Computer computer = new Computer(factory.createMainBoard(),factory.createCpu());
computer.server();
}
}