抽象工厂模式

Posted sallyiszxm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象工厂模式相关的知识,希望对你有一定的参考价值。

例子背景:
随着客户的要求越来越高,宝马车需要不同配置的空调和发动机等配件。于是这个工厂开始生产空调和发动机,用来组装汽车。这时候工厂有两个系列的产品:空调和发动机。宝马320系列配置A型号空调和A型号发动机,宝马230系列配置B型号空调和B型号发动机。

概念:
   抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。比如宝马320系列使用空调型号A和发动机型号A,而宝马230系列使用空调型号B和发动机型号B,那么使用抽象工厂模式,在为320系列生产相关配件时,就无需制定配件的型号,它会自动根据车型生产对应的配件型号A。

针对百度百科上对于抽象工厂模式的简介,结合本例如下:

当每个抽象产品都有多于一个的具体子类的时候(空调有型号A和B两种,发动机也有型号A和B两种),工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品角色都有两个具体产品(产品空调有两个具体产品空调A和空调B)。抽象工厂模式提供两个具体工厂角色(宝马320系列工厂和宝马230系列工厂),分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。

抽象工厂模式代码

 产品类: 

//发动机以及型号 
public interface Engine  

 
public class EngineA extends Engine 
public EngineA() 
System.out.println("制造-->EngineA"); 
 
 
public class EngineBextends Engine 
public EngineB() 
System.out.println("制造-->EngineB"); 
 
 

//空调以及型号 
public interface Aircondition  

 
public class AirconditionA extends Aircondition 
public AirconditionA() 
System.out.println("制造-->AirconditionA"); 
 
 
public class AirconditionB extends Aircondition 
public AirconditionB() 
System.out.println("制造-->AirconditionB"); 
 

创建工厂类:


//创建工厂的接口 
public interface AbstractFactory  
//制造发动机
public Engine createEngine();
//制造空调 
public Aircondition createAircondition(); 
 


//为宝马320系列生产配件 
public class FactoryBMW320 implements AbstractFactory 

@Override 
public Engine createEngine()  
return new EngineA(); 
 
@Override 
public Aircondition createAircondition()  
return new AirconditionA(); 
 
 
//宝马523系列
public class FactoryBMW523 implements AbstractFactory  

@Override 
public Engine createEngine()  
return new EngineB(); 
 
@Override 
public Aircondition createAircondition()  
return new AirconditionB(); 
 


客户:


public class Customer  
public static void main(String[] args) 
//生产宝马320系列配件
FactoryBMW320 factoryBMW320 = new FactoryBMW320(); 
factoryBMW320.createEngine();
factoryBMW320.createAircondition();

//生产宝马523系列配件 
FactoryBMW523 factoryBMW523 = new FactoryBMW523(); 
factoryBMW320.createEngine();
factoryBMW320.createAircondition();
 

以上是关于抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

简单工厂模式+工厂方法模式+抽象工厂模式

java抽象工厂的使用意图是啥?

工厂模式抽象工厂模式策略模式

工厂模式 - 抽象工厂

设计模式——抽象工厂模式

设计模式之抽象工厂模式