Java设计模式-创建型-抽象工厂模式

什么是抽象工厂模式

抽象工厂模式是工厂模式的一种抽象形态,通常将工厂类定义为abstract,并且在工厂的方法中,所返回的对象也是抽象的。这个返回的对象往往就是客户所需要的。

 

抽象工厂模式的作用

抽象工厂模式的主要作用是可以将一系列的对象系统的抽象,并将得到的抽象对象通过工厂模式进行分类。是用户使用对象时候可以更系统和清晰。

也就是说我们所要使用的对象就是抽象工厂模式生产出的产品,并且其中的生产过程或者细节都不需要我们去了解。

 

UML如下:

Abstract factory UML.svg

 

 

请看示例:

 

 

package pattern.abstractFactory;

//抽象工厂,注意2个方法的返回对象是具体的产品,但同样它们也是抽象的
public abstract class AbstractFactory {

	public abstract Letter createLetter();
	
	public abstract Resume createResume();
	
}

 

package pattern.abstractFactory;

//具体的Fancy工厂,重写了抽象工厂的2个方法,在这里它们做了具体的实现
public class FancyDocumentCreator extends AbstractFactory {

	@Override
	public Letter createLetter() {
		System.out.println("Create Fancy Letter");
		return new FancyLetter();
	}

	@Override
	public Resume createResume() {
		System.out.println("Create Fancy Resume");
		return new FancyResume();
	}

}

 

package pattern.abstractFactory;

//具体的Modern工厂,重写了抽象工厂的2个方法,在这里它们做了具体的实现
public class ModernDocumentCreator extends AbstractFactory {

	@Override
	public Letter createLetter() {
		System.out.println("Create Modern Letter");
		return new ModernLetter();
	}

	@Override
	public Resume createResume() {
		System.out.println("Create Modern Resume");
		return new ModernResume();
	}

}

 

package pattern.abstractFactory;

//抽象产品类Letter
public abstract class Letter {}

 

package pattern.abstractFactory;
//抽象产品类Resume
public abstract class Resume {}

 

package pattern.abstractFactory;

//抽象类Letter的子类
public class FancyLetter extends Letter {
	@Override
	public String toString() {
		return "Fancy Letter";
	}
}

 

package pattern.abstractFactory;

//抽象类Letter的子类
public class ModernLetter extends Letter {
	@Override
	public String toString() {
		return "Modern Letter";
	}
}

 

package pattern.abstractFactory;
//抽象类Resume的子类
public class FancyResume extends Resume {
	@Override
	public String toString() {
		return "Fancy Resume";
	}
}

 

package pattern.abstractFactory;
//抽象类Resume的子类
public class ModernResume extends Resume {
	@Override
	public String toString() {
		return "Modern Resume";
	}
}

 

package pattern.abstractFactory;

//客户调用类
public class AbstractFactoryDemo {
	public static void main(String[] args){
		//具体的调用方式,在这里可以看到用户不需要去new FancyLetter, new ModernResume,然后再set它们的属性, 这里完全由工厂来生产。
		//同样也有缺陷的是模式中的工厂可以生产Letter和Resume,但是如果增加一个中其他类型的文档,则需要修改工厂的代码,这个是比较麻烦的。
		AbstractFactory factory = new FancyDocumentCreator();
		FancyLetter fancyLetter = (FancyLetter) factory.createLetter();
		System.out.println(fancyLetter.toString());
		
		AbstractFactory factory2 = new ModernDocumentCreator();
		ModernResume modernResume = (ModernResume) factory2.createResume();
		System.out.println(modernResume.toString());
	}
}

 

 

 

 

 

上面的代码中,为清楚的说明的抽象工厂的表现形式,使用了较多的类,但是看清楚后,无论是结构还是抽象工厂模式都可以看的清楚。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值