之前两篇博客已经介绍了工厂模式中的简单工厂模式和工厂方法模式,这篇来介绍下抽象工厂模式。
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定具体类型的情况下,能够创建多个产品族的产品对象。
何为“产品族”,即具有某一个相同特点的许多不同产品,就可称为产品组,如浙江种植的苹果,香蕉,梨子;福建种植的苹果,香蕉,梨子,这就是具体的产品族。
抽象产品类
public interface Fruit {
/*
* 种植
*/
public void plant();
}
public abstract class Apple implements Fruit {
}
public abstract class Banana implements Fruit {
}
具体产品,由他们组成产品族
/*
* 福建的苹果
*/
public class FujianApple extends Apple {
@Override
public void plant() {
// TODO Auto-generated method stub
System.out.println("福建种的苹果");
}
}
/*
* 福建香蕉
*/
public class FujianBanana extends Banana {
@Override
public void plant() {
// TODO Auto-generated method stub
System.out.println("福建种的香蕉");
}
}
/*
* 浙江苹果
*/
public class ZhejiangApple extends Apple {
@Override
public void plant() {
// TODO Auto-generated method stub
System.out.println("浙江种的苹果");
}
}
/*
* 浙江的香蕉
*/
public class ZhejiangBanana extends Banana {
@Override
public void plant() {
// TODO Auto-generated method stub
System.out.println("浙江种的香蕉");
}
}
抽象工厂类
public interface FruitFactory {
/*
* 生产苹果
*/
public Fruit productApple();
/*
* 生产香蕉
*/
public Fruit productBanana();
}
具体的工厂类
/*
* 福建工厂
*/
public class FujianFactory implements FruitFactory {
@Override
public Fruit productApple() {
// TODO Auto-generated method stub
return new FujianApple();
}
@Override
public Fruit productBanana() {
// TODO Auto-generated method stub
return new FujianBanana();
}
}
/*
* 浙江工厂
*/
public class ZhejiangFactory implements FruitFactory {
@Override
public Fruit productApple() {
// TODO Auto-generated method stub
return new ZhejiangApple();
}
@Override
public Fruit productBanana() {
// TODO Auto-generated method stub
return new ZhejiangBanana();
}
}
主类
public class MainClass {
public static void main(String[] args) {
FruitFactory zhejiangFactory = new ZhejiangFactory();
Fruit appleZ = zhejiangFactory.productApple();
Fruit bananaZ = zhejiangFactory.productBanana();
appleZ.plant();
bananaZ.plant();
System.out.println("---------------------");
FruitFactory fujian = new FujianFactory();
Fruit appleF = fujian.productApple();
Fruit bananaF = fujian.productBanana();
appleF.plant();
bananaF.plant();
}
}
抽象工厂模式与工厂方法模式区别,通俗直接的讲,工厂方法模式一个工厂只生产一个产品,而抽象工厂模式一个工厂生产一个产品族,可以包含n个产品