一、模式简介
定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。
场景:创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。客户不关心创建产品的细节,只关心产品的品牌,只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。
- 角色结构:
- 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。
- 具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
- 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
- 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间相对应。
二、模式实现
定义产品工厂接口和具体产品实现工厂
public interface FruitFactory {
Fruit create();
}
public class AppleFactory implements FruitFactory {
@Override
public Fruit create() {
return new Apple();
}
}
public class BananaFactory implements FruitFactory {
@Override
public Fruit create() {
return new Banana();
}
}
定义产品接口和具体产品
public interface Fruit {
void info();
}
public class Apple implements Fruit {
@Override
public void info() {
System.out.println("苹果");
}
}
public class Banana implements Fruit {
@Override
public void info() {
System.out.println("香蕉");
}
}
具体工厂生产具体产品
FruitFactory appleFactory = new AppleFactory();
FruitFactory bananaFactory = new BananaFactory();
Fruit apple = appleFactory.create();
Fruit banana = bananaFactory.create();
apple.info();
banana.info();
网友评论