java设计模式--抽象工厂模式

1. 抽象工厂模式的定义

创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。它的通用类图如下:

抽象工厂模式是工厂模式的升级版,有多个业务品种时候采用抽象工厂模式。产品的抽象类,代码如下:

public abstract class AbstractProductA {
	//相同的功能
	public void dothing(){
		System.out.println("公用");
	}
	//特定的功能
	public abstract void doSomething();
}
public abstract class AbstractProductB {
	//相同的功能
	public void dothing(){
		System.out.println("公用");
	}
	//特定的功能
	public abstract void doSomething();
}

具体的产品实现抽象类,包括A和B,代码如下:

public class productA1 extends AbstractProductA{

	@Override
	public void doSomething() {
		System.out.println("我要A1");
	}
}
public class productA2 extends AbstractProductA{

	@Override
	public void doSomething() {
		System.out.println("我要A2");
	}
}
public class productB1 extends AbstractProductB{

	@Override
	public void doSomething() {
		System.out.println("我要B1");
		
	}
}
public class productB2 extends AbstractProductB{

	@Override
	public  void doSomething() {
		System.out.println("我要B2");
	}
}

抽象工厂类AbstractCreator的职责是定义每个工厂要实现的功能,抽象工厂定义了两个产品。对于多个产品还可以增加。代码如下:

public  abstract class AbstractCreator {

	public abstract AbstractProductA createProductA();
	
	public abstract AbstractProductB createProductB();
}

创建产品,由具体的实现类实现,代码如下:

public class Creator1 extends AbstractCreator{

	@Override
	public AbstractProductA createProductA() {
		return new productA1();
	}

	@Override
	public AbstractProductB createProductB() {
		return new productB1();
	}

}
public class Creator2 extends AbstractCreator{

	@Override
	public AbstractProductA createProductA() {
		return new productA2();
	}

	@Override
	public AbstractProductB createProductB() {
		return new productB2();
	}
}

最后测试测类,代码如下:

public class factoryTest {

	public static void main(String[] args) {
		AbstractCreator creator1 = new Creator1();
		AbstractCreator creator2 = new Creator2();
		
		AbstractProductA productA1= creator1.createProductA();
		AbstractProductB productB1= creator1.createProductB();
		AbstractProductA productA2= creator2.createProductA();
		AbstractProductB productB2= creator2.createProductB();
		
		productA1.dothing();
		productA1.doSomething();
		productB1.dothing();
		productB1.doSomething();
	}
}

2.工厂模式和抽象工厂模式的区别

1:工厂方法模式 
一个抽象产品类,可以产生出多个具体产品类。 (例如 :上一篇工厂模式只创建了一个商品,实现多个具体的商品)
一个抽象工厂类,可以产生出多个具体工厂类。 (例如 :上一篇工厂模式只创建了一个工厂,有多个工厂类)
每个具体工厂类只能创建一个具体产品类的实例。

2:抽象工厂模式 
多个抽象产品类,每个抽象产品类可以产生出多个具体产品类。 (创建了多个抽象产品类,每个都可以创建多个具体产品类)
一个抽象工厂类,可以产生出多个具体工厂类。 
每个具体工厂类可以创建多个具体产品类的实例。

3. 抽象工厂模式的优缺点


3.1 优点
        每个产品的实现类不是高层模块要关心的,它要关心的是接口,是抽象,它不关心对象是如何创建出来的,这都由工厂类负责的,只要知道工厂类是谁,我就能创建一个需要的对象,省时省力。

        产品等级扩展还是非常容易的,增加一个产品等级,只要增加一个工厂类负责新增加出来的产品生产任务即可。

3.2 缺点
        抽象工厂模式最大的缺点就是产品族扩展非常困难。如果我们要增加一个产品C,也就是说产品族由原来的A和B增加到3个,那么我们首先要在抽象类AbstractCreator中增加createProductC()方法.拓展有一些弊端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值