一. 定义

  • 简单工厂模式又称静态工厂方法模式,在简单工厂模式中可以根据传入参数的不同返回不同的实例,而不需要知道具体类的类名。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。(一个产品等级结构)

二. 模式结构

uTools_1687510027028.png

1. Factory(工厂角色)

  • 即工厂类,负责实现创建所有实例的内部逻辑;工厂类可以被外界直接调用,创建所需产品对象;在工厂类中提供了静态的工厂方法factoryMethod(),他返回一个抽象产品类Product,所有具体产品都是抽象产品的子类。

2. Product(抽象产品角色)

  • 是所有具体产品类的父类

3. ConcreteProduct(具体产品角色)

  • 是简单工厂模式的创建目标,都继承了抽象产品角色。

三. 实例

uTools_1687510911926.png

1. 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播放中");
    }
}

2. TVFactory

public class TVFactory
{
    public static TV produceTV(String brand) throws Exception
    {
        if("Haier".equals(brand))
        {
            System.out.println("工厂生产海尔TV");
            return new HaierTV();
        }
        else if("MeiDi".equals(brand))
        {
            System.out.println("工厂生产海尔TV");
            return new MeiDiTV();
        }
        else
        {
            throw new Exception("无法生产当前品牌");
        }
    }
}

3. Client

public class Client
{
    public static void main(String[] args) throws Exception
    {
        //生产海尔
        HaierTV haierTV= (HaierTV) TVFactory.produceTV("Haier");
        haierTV.play();
        
        //生产美的
        TVFactory tvFactory=new TVFactory();
        MeiDiTV meiDiTV=(MeiDiTV) tvFactory.produceTV("MeiDi");
        meiDiTV.play();
    }
}