模式定义
抽象工厂模式提供了一个接口,用于创建相关或者依赖对象的家族,而不需要指定具体的实现类
与工厂方法模式不同的是:
抽象工厂模式生产多类产品,而工厂方法模式生产一类产品
代码实现
定义一个食品工厂
public interface FoodFactory {
Fruit createFruit();
Fry createFry();
}
工厂方法模式这里只生产Fruit或者Fry其中之一
Fruit和Fry均为接口,根据依赖倒置原则,这里应该是接口而不是具体类,接口信息如下
public interface Fruit {
void info();
}
public interface Fry {
void info();
}
这里我要生产Fruit和Fry产品组合,则代码如下
/**
* A组合食品工厂
*/
public class AFoodFactory implements FoodFactory{
@Override
public Fruit createFruit() {
return new Apple();
}
@Override
public Fry createFry() {
return new Chips();
}
}
/**
* B食品组合
*/
public class BFoodFactory implements FoodFactory {
@Override
public Fruit createFruit() {
return new Banana();
}
@Override
public Fry createFry() {
return new Cookie();
}
}
其中生产的具体食品Apple、Chips、Banana、Cookie类如下
class Apple implements Fruit {
@Override
public void info() {
System.out.println("我是苹果..");
}
}
class Banana implements Fruit{
@Override
public void info() {
System.out.println("我是香蕉..");
}
}
class Chips implements Fry {
@Override
public void info() {
System.out.println("我是薯片..");
}
}
class Cookie implements Fry{
@Override
public void info() {
System.out.println("我是饼干..");
}
}
接下来看下如何使用
public static void main(String[] args) {
FoodFactory afood = new AFoodFactory();
Fruit fruit = afood.createFruit();
Fry fry = afood.createFry();
fruit.info();
fry.info();
}
我是苹果..
我是薯片..
通过以上结果可以看出,我们这里并不知道具体是怎么创建苹果和薯片对象的,只需要调用对应工厂方法即可,这里就达到了解耦的目的,也更易于扩展