有所关联。同理SouthGrape 和SouthPine 也是一个产品族。
可以说,抽象工厂模式和工厂方法模式的区别就在于需要创建对象的复杂程度上。而且
抽象工厂模式是三个里面最为抽象、最具一般性的。
抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象
而且使用抽象工厂模式还要满足一下条件:
1) 系统中有多个产品族,而系统一次只可能消费其中一族产品。
2) 同属于同一个产品族的产品一起使用。
来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):
1) 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须
实现的接口或者必须继承的父类。在java 中它由抽象类或者接口来实现。
2) 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体
产品的对象。在java 中它由具体的类来实现。
3) 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在 java 中一般有抽象类
或者接口来实现。
4) 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在 java 中由具体的类
来实现。
[java]
//抽象产品角色,具体产品角色与简单工厂模式类似,只是变得复杂了些,这里略。
//抽象工厂角色
public interface AbFruitFactory
{
public Fruit getGrape();
public Fruit getPine();
}
//抽象产品角色,具体产品角色与简单工厂模式类似,只是变得复杂了些,这里略。
//抽象工厂角色
public interface AbFruitFactory
{
public Fruit getGrape();
public Fruit getPine();
}
[java]
public class NorthFruitFactory implements AbFruitFactory
{//具体工厂角色
@Override
public Fruit getGrape()
{
// TODO Auto-generated method stub
return new NorthGrape();
}
@Override
public Fruit getPine()
{
// TODO Auto-generated method stub
return new NorthPine();
}
}
public class NorthFruitFactory implements AbFruitFactory
{//具体工厂角色
@Override
public Fruit getGrape()
{
// TODO Auto-generated method stub
return new NorthGrape();
}
@Override
public Fruit getPine()
{
// TODO Auto-generated method stub
return new NorthPine();
}
}[java]
public class SouthFruitFactory implements AbFruitFactory
{
@Override
public Fruit getGrape()
{
// TODO Auto-generated method stub
return new SouthGrape();
}
@Override
public Fruit getPine()
{
// TODO Auto-generated method stub
return new SouthPine();
}
}
public class SouthFruitFactory implements AbFruitFactory
{
@Override
public Fruit getGrape()
{
// TODO Auto-generated method stub
return new SouthGrape();
}
@Override
public Fruit getPine()
{
// TODO Auto-generated method stub
return new SouthPine();
}
}[java]
public class MainClass
{
/**
* @param args
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static void main(String[] args) throws InstantiationException, IllegalAccessException
{
// TODO Auto-generated method stub
AbFruitFactory Abff_0=new NorthFruitFactory();//抽象工厂方法
Fruit grape_N=Abff_0.getGrape();
grape_N.get();
AbFruitFactory Abff_1=new SouthFruitFactory();
Fruit grape_S=Abff_1.getGrape();
grape_S.get();
Fruit pine_N=Abff_0.getPine();
pine_N.get();
Fruit pine_S=Abff_1.getPine();
pine_S.get();
}
}
public class MainClass
{
/**
* @param args
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static void main(String[] args) throws InstantiationException, IllegalAccessException
{
// TODO Auto-generated method stub
AbFruitFactory Abff_0=new NorthFruitFactory();//抽象工厂方法
Fruit grape_N=Abff_0.getGrape();
grape_N.get();
AbFruitFactory Abff_1=new SouthFruitFactory();
Fruit grape_S=Abff_1.getGrape();
grape_S.get();
Fruit pine_N=Abff_0.getPine();
pine_N.get();
Fruit pine_S=Abff_1.getPine();
pine_S.get();