定义:ui
抽象工厂模式是全部形态的工厂模式中最为抽象和最具通常性的一种形态,,当有多个抽象角色时,使用的一种工厂模式,它向客户端提供一个接口,使客户端在没必要指定产品的具体的状况下,建立多个产品族中的产品对象。spa
注意:htm
注意产品族的概念:对象
是指位于不一样产品等级结构中,功能相关联的产品组成的家族。通常是位于不一样的等级结构中的相同位置上。显然,每个产品族中含有产品的数目,与产品等级结构的数目是相等的,造成一个二维的坐标系,水平坐标是产品等级结构,纵坐标是产品族。叫作相图。接口
详细参考:get
http://baike.baidu.com/view/1580269.htm?fr=ala0_1产品
示例:某人喜欢作什么it
注意看这“某人喜欢”与“作什么”,这能够理解为两个产品族,他们在逻辑上存在必定的关系,但又是绝对的相互独立,如下咱们以“奶奶喜欢种苹果”、“爷爷喜欢种香蕉”的示例来讲明。class
示例中有两个产品族,那咱们首先得为这两个产品族创建相应的工厂,基础
某人喜欢
public interface FamilyPerson {
public void like();
}
种什么(以水果为例)
public interface Fruit {
public void plant();
}
好了,以上就定义了“某人喜欢”与“种什么”两个工厂了,后面再来分别定义他们的实现类,首先定义“某人”的爷爷、奶奶实现类:
爷爷:
public class GrandePa implements FamilyPerson {
public void like() {
System.out.println("Grandpa likes ");
}
}
奶奶:
public class GrandeMa implements FamilyPerson {
public void like() {
System.out.println("Grandma likes ");
}
}
再定义“种什么”的苹果、香蕉实现类:
苹果:
public class Apple implements Fruit {
public void plant() {
System.out.println("Plant Apple.");
}
}
香蕉:
public class Banana implements Fruit {
public void plant() {
System.out.println("Plant Banana");
}
}
好了,基础的工厂都有了,如今须要一个抽象工厂了,呵,就是同时引用多个基础工厂的工厂,定下“爱好”工厂以下:
public interface Hobby {
public Fruit getFruit();
public FamilyPerson getFamilyPerson();
}
实现爷爷喜欢种香蕉:
public class GrandePaHobby implements Hobby {
public FamilyPerson getFamilyPerson() {
return new GrandePa();
}
public Fruit getFruit() {
return new Banana();
}
}
实现奶奶喜欢种苹果:
public class GrandeMaHobby implements Hobby {
public FamilyPerson getFamilyPerson() {
return new GrandeMa();
}
public Fruit getFruit() {
return new Apple();
}
}
一切OK,来个调用实例:
public class Test1 {
public static void main(String[] args) {
Hobby hobby = new GrandeMaHobby();
hobby.getFamilyPerson().like();
hobby.getFruit().plant();
}
}
输出:
Grandma likes
Plant Apple.