黑马程序员——设计模式——抽象工厂模式

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

使用场景:一个产品,有多个产品结构

缺点:加入新加产品的话必须修改工厂

实现方法

1.建立抽象产品(抽象类或者接口)

2.建立具体产品(实现类)

3.建立抽象工厂(接口)

4.建立具体工厂(实现接口)


场景描述,有不同的CPU和主板,华硕主板必须安装Intel CPU ,技嘉主板必须安装AMD CPU


1.建立抽象产品类

//抽象产品
//CPU
abstract class CPU{
	public abstract void run();//运行方法
}
//抽象产品
//主板
abstract class Motherboard{
	public abstract void useCPU(CPU c);//安装CPU的方法
}

2.建立具体产品类

cpu


//具体产品类
//实现CPU 为AMD CPU
class AMD extends CPU{
	
	public void run(){
		System.out.println("AMD CPU run");
	}
}
//具体产品类
//实现CPU 为Intel CPU
class Intel extends CPU{

	public void run(){
		System.out.println("Intel CPU run");
	}
}

主板

//具体产品类
//实现主板 华硕主板
class ASUS extends Motherboard{
	//使用CPU
	public void useCPU(CPU c) {
		if(c instanceof Intel){//如果是Intel的CPU主板运行
			c.run();
			System.out.println("安装正确,ASUS主板运行成功");
		}else {//不是intel的报错
			System.out.println("请使用Intel CPU");
		}
	}
}
//具体产品类
//实现主板 技嘉主板
class GIGABYTE extends Motherboard{
	//使用CPU
	public void useCPU(CPU c) {
		if(c instanceof AMD){//如果是AMD的CPU运行
			c.run();
			System.out.println("安装正确,GIGABYTE主板运行成功");
		} else {//不是AMD报错
			System.out.println("请使用 AMD CPU");
		}
	}
}
3.抽象工厂

//抽象工厂类
interface FactoryAbstract{
	//创建CPU
	public abstract CPU createCPU();
	//创建主板
	public abstract Motherboard createMotherboard();
}

4.创建具体工厂

<span style="font-size:10px;">//具体工厂类
//生产AMD的CPU和技嘉主板
class FactoryAMDGIGABYTE implements FactoryAbstract{

	//生产AMD
	public CPU createCPU() {
		return new AMD();
	}
	//生产技嘉主板
	public Motherboard createMotherboard() {
		return new GIGABYTE();
	}
	
}
//具体工厂类
//生产Intel和华硕主板
class FactoryIntelASUS implements FactoryAbstract{
	//生产Intel的CPU
	public CPU createCPU() {
		return new Intel();
	}
	//生产华硕的CPU
	public Motherboard createMotherboard() {
		return new ASUS();
	}
	
}</span>


测试类

public class Main {

	public static void main(String[] args) {
		FactoryAbstract fac1 = new FactoryIntelASUS();
		FactoryAbstract fac2 = new FactoryAMDGIGABYTE();
		Motherboard mb = fac1.createMotherboard();
		CPU c = fac1.createCPU();
		mb.useCPU(fac1.createCPU());
		
		mb = fac2.createMotherboard();
		c = fac2.createCPU();
		mb.useCPU(fac2.createCPU());
		
		mb.useCPU(fac1.createCPU());
		
	}

}

输出

Intel CPU run
安装正确,ASUS主板运行成功
AMD CPU run
安装正确,GIGABYTE主板运行成功
请使用 AMD CPU



你可能感兴趣的:(工厂模式)