抽象工厂模式

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

 

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

 

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



 下面用代码实现上图中的产品分类逻辑:

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

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();
	}
	
}

 附上工程代码,欢迎下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值