一. 定义

  • 引入抽象工厂类,具体产品的创建过程封装在抽象工厂的子类,通过工厂子类来确定实例化哪个具体产品类,增加新产品类时只需增加相应的具体工厂类。(一个产品等级结构)

二. 模式结构

uTools_1687512809557.png

1. Product(抽象产品)

  • 产品接口

2. ConcreteProduct(具体产品)

  • 实现抽象产品,具体的创建对象

3. Factory(抽象工厂)

  • 工厂类的抽象父类,任何具体工厂都必须实现它。

4. ConcreteFactory(具体工厂)

  • 抽象工厂的子类,返回一个具体产品类实例

三. 实例

uTools_1687514373005.png

1. TVFactory/HaierFactory/MeiDifactory

public interface TVFactory
{
    public TV produceTV();
}
public class HaierFactory implements TVFactory
{
    @Override
    public TV produceTV() {
        System.out.println("海尔工厂生产海尔TV");
        return new HaierTV();
    }
}
public class MeiDiFactory implements TVFactory{
    @Override
    public TV produceTV() {
        System.out.println("美的工厂生产美的TV");
        return new MeiDiTV();
    }
}

2. TV/HaierTV/MeiDiTV

public interface TV
{
    public void play();
}
public class HaierTV implements TV
{
    @Override
    public void play()
    {
        System.out.println("海尔TV播放中");
    }
}
public class MeiDiTV implements TV
{
    @Override
    public void play()
    {
        System.out.println("美的TV播放中");
    }
}

3. Client

public class Client
{
    public static void main(String[] args) throws Exception
    {
        //生产海尔TV
        HaierFactory haierFactory=new HaierFactory();
        HaierTV haierTV= (HaierTV) haierFactory.produceTV();
        haierTV.play();

        //生产美的TV
        MeiDiFactory meiDiFactory=new MeiDiFactory();
        MeiDiTV meiDiTV= (MeiDiTV) meiDiFactory.produceTV();
        meiDiTV.play();
    }
}