抽象工厂模式

本文为原创文章,转载需注明出处!

抽象工厂模式与工厂方法模式有相似的概念。抽象工厂模式和工厂模式一样是层次类的结构,但是在这里它不仅仅负责创建一个产品类的对象,而是创建一族产品类对象。在Java程序中,它可以是接口或者抽象类。

抽象工厂模式中包括:

(1)一系列互相有关联的产品类,这些产品类有相同的结构。

(2)一系列实的工厂类,实现由抽象工厂类提供的接口。每个实的工厂类生产一组相关的产品类的对象。


下面将以不同保险公司和不同的险种所组成的抽象工厂向大家描述这一体系结构


类图:


类图是用Visio画的,看起来可能会比较复杂,那就直接看代码吧。


1、首先我们需要创建一个工厂类接口:

public abstract class InsuranceFactory {
	
	public static final String BodyInjur = "驾驶员身体受伤险";
	public static final String Collisoin = "汽车损坏险";
	public static final String ManyAccidents = "多种事故险";
	public static final String PersonInjur = "人员伤亡险";
	
	public abstract PICC getPICC();	//分别定义两种公司,即工厂类
	public abstract PingAn getPingAn();
	
	public static InsuranceFactory getInsuranceFactory(String type) {
		InsuranceFactory If = null;
		if (type.equals(InsuranceFactory.BodyInjur)) { //根据客户选择保险类型的不同创建
			If = new BodyInjurFactory();               //不同类型的“保险工厂”
		}
		else if (type.equals(InsuranceFactory.Collisoin)) {
			If = new CollisionFactory();
		}else if (type.equals(InsuranceFactory.ManyAccidents)) {
			If = new ManyAccidentsFactory();
		}
		else if (type.equals(InsuranceFactory.PersonInjur)) {
			If = new PersonInjurFactory();
		}
		return If;
	}
}

2、根据工厂类接口继承的子类(只举其中一例)

public class BodyInjurFactory extends InsuranceFactory { //分别获取PICC和PingAn的驾驶员
														   //身体受伤信息
	public PICC getPICC() { 
		return new PICCBodyInjur();
	}

	public PingAn getPingAn() {
		return new PingAnBodyInjur();
	}

}

3、保险公司接口

public interface PICC {

	public String getPICCInfo(); //获取PICC保险详细信息
}

4、实现该接口的子类

public class PICCBodyInjur implements PICC{

	public String getPICCInfo() { //PICC的驾驶员身体受伤保险描述
		return "中国人寿保险驾驶员身体受伤保险!";
	}

}

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。

抽象工厂模式的优势在于:当客户对象要从一个相关的产品组中创建一个对象,而没有必要知道到底创建哪个对象时,可以应用抽象工厂模式。如果不使用抽象工厂模式,创建对象的条件语句将会出现在客户程序的许多地方,程序的可维护性将变差。抽象工厂模式帮助程序员避免了以上所述的重复的、复杂的条件语句,提供了必要的创建对象的接口。而且最关键的一点就是抽象工厂模式符合了软件体系结构最基本的闭原则




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章