1.抽象工厂:工厂内定义创建一系列相关或者相互依赖的对象的接口(如农场工厂类提供创建食物和肥料产品对象接口),但不做具体实例的创建,具体实例交给具体工厂类去创建(如肉类食物、蔬菜类食物、动物类肥料、植物类肥料产品实例分别交由具体的动物处理工厂和植物处理工厂处理)
2.简单例子:
(1)首先目的是生产肉类食物、蔬菜类食物、动物类肥料、植物类肥料产品四种产品;
(2)但是为了解耦,易于扩展,我们不直接在农场(farm)中创建这些产品实例,而是向外传达农场有生产食物和肥料,具体肉类食物和肥料交给动物农场去生产,具体植物类食物和肥料交给植物农场去生产;
(3)简单代码例子:
- 创建农场接口(接口中不创建具体的食物和肥料实例)
/**
* @ClassName Farm
* @Description 农场接口:可以生产食物,也可以生产肥料
* @Author hs
* @Date 2021/1/31 17:06
* @Version 1.0
*/
public interface Farm {
//生产食品
Food productFood();
//生产废料
Feiliao productFeiliao();
}
- 创建动物农场工厂类(负责创建具体的动物食物和动物肥料实例)
/**
* @ClassName Animal
* @Description 动物
* @Author hs
* @Date 2021/1/31 17:07
* @Version 1.0
*/
public class Animal implements Farm{
//生产食品
@Override
public Food productFood(){
return new AnimalFood();
}
//生产废料
@Override
public Feiliao productFeiliao(){
return new AnimalFeiliao();
}
}
- 创建植物农场类(负责创建具体的植物食物和植物肥料实例)
/**
* @ClassName Plant
* @Description 植物
* @Author hs
* @Date 2021/1/31 17:08
* @Version 1.0
*/
public class Plant implements Farm{
//生产食品
@Override
public Food productFood(){
return new PlantFood();
}
//生产废料
@Override
public Feiliao productFeiliao(){
return new PlantFeiliao();
}
}
- 简单测试(分别创建动物和植物工厂类,通过工程类创建具体的产品实例)
/**
* @ClassName Test
* @Description TODO
* @Author hs
* @Date 2021/2/1 23:17
* @Version 1.0
*/
public class Test {
public static void main(String[] args) {
Animal animal =new Animal();
Plant plant = new Plant();
animal.productFeiliao().mai();
animal.productFood().chi();
plant.productFeiliao().shifei();
plant.productFood().mai();
}
}