欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

抽象工厂模式

程序员文章站 2022-04-04 14:13:33
...

设计模式之禅学习之抽象工厂模式

 

1、抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。工厂方法模式中的工厂生产的往往都是同一级别的产品(比如生产的就是人);而抽象工厂模式的工厂生产的产品是分等级的(比如生产的是男人和女人,虽然都是人,但是是多品种)。用抽象工厂模式是一般都是多业务品种,多业务分类,会有多个工厂实现类,来生产不用业务品种。

 

2、产品类的等级,也就是产品是分种类的:


抽象工厂模式
            
    
    博客分类: DesignPattern 设计模式抽象工厂 
 下面用代码实现上图中的产品分类逻辑:

首先定义最上面的产品接口:

package com.wang.factoryPattern.abstractF;

/**
 * 产品接口定义
 * @author HeJW
 *
 */
public interface IProduct {
	
	//每个产品共有的方法
	public void shareMethod();
	
	//每个产品相同的方法,不同的实现
	public abstract void doSomething();
}

 然后是抽象产品的分类:

package com.wang.factoryPattern.abstractF;

public class Product1Factory implements IProductFactory {

	@Override
	public AbstractProductA productAFactory() {
		return new ProductA1();
	}

	@Override
	public AbstractProductB productBFactory() {
		return new ProductB1();
	}

}

 这里只给出了一种分类,实际项目中应该是多中的,我们可以在定义多个实现,

在往下就是具体的产品类的。只要分别实现抽象产品就可以了。一下是一个例子:

package com.wang.factoryPattern.abstractF;

public class ProductA1 extends AbstractProductA {

	@Override
	public void doSomething() {
		System.out.println("产品A的第1个实现");
	}

}

 3、创建工厂。创建工厂接口时,应该按产品的分类,分别定义生产这种产品的工厂方法:

package com.wang.factoryPattern.abstractF;

/**
 * 抽象工厂定义
 * @author HeJW
 *
 */
public interface IProductFactory {
	
	//A系类产品工厂
	public AbstractProductA productAFactory();
	
	//B系类产品工厂
	public AbstractProductB productBFactory();
}

 实现该工厂接口时,分别实现产品实例即可,以下是一个工厂实现的例子:

package com.wang.factoryPattern.abstractF;

public class Product1Factory implements IProductFactory {

	@Override
	public AbstractProductA productAFactory() {
		return new ProductA1();
	}

	@Override
	public AbstractProductB productBFactory() {
		return new ProductB1();
	}

}

 4、编写一个场景类:

package com.wang.factoryPattern.abstractF;

public class App {
	
	public static void main(String[] args) {
		
		IProductFactory factory1 = new Product1Factory();
		IProductFactory factory2 = new Product2Factory();
		
		AbstractProductA pa1 = factory1.productAFactory();
		pa1.doSomething();
		
		AbstractProductA pa2 = factory2.productAFactory();
		pa2.doSomething();
		
		AbstractProductB pb1 = factory1.productBFactory();
		pb1.doSomething();
		
		AbstractProductB pb2 = factory2.productBFactory();
		pb2.doSomething();
	}
	
}

 附上工程代码,欢迎下载

  • 抽象工厂模式
            
    
    博客分类: DesignPattern 设计模式抽象工厂 
  • 大小: 8.7 KB