Unity 设计模式之 工厂方法模式的实例介绍

 时间:2026-02-15 13:20:58

1、概述:

  定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。

2、模式中的角色:

  2.1 抽象工厂(Creator):这个抽象类(或接口)声明一个创建对象的工厂方法,用来返回一个Product类型的对象。

  2.2 具体工厂(ConcreteCreator):重定义工厂方法,返回一个具体的Concrete Product实例。

  2.3 抽象产品(Product):定义工厂方法所创建的对象。

  2.4 具体产品(ConcreteProduct): 具体产品,继承自Product抽象类。

3、 模式解读:

  3.1 工厂方法模式的一般化类图

Unity 设计模式之 工厂方法模式的实例介绍

Unity 设计模式之 工厂方法模式的实例介绍

4、模式总结:

  4.1 优点:

    工厂方法去除了条件分支(解除了工厂类与分支的耦合),解决了简单工厂对修改开放的问题。

  4.2 缺点:

    工厂方法模式实现时,客户端需要决定实例化哪个工厂来实现对具体产品的构建,选择判断依然存在,也就是说,工厂方法模式将简单工厂的逻辑判断交给客户端去处理。

    对简单工厂模式来说,增加功能是要修改工厂类的;但对工厂方法模式,修改的是客户端。

  4.3 使用场景:

    对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。

    子类的数量不固定,随时可能有新的功能子类出现

1、打开Unity,新建一个空工程,具体如下图

Unity 设计模式之 工厂方法模式的实例介绍

2、在工程中,新建几个脚本,然后双击打开,具体如下图

Unity 设计模式之 工厂方法模式的实例介绍

3、脚本的具体代码和代码说明如下图

Unity 设计模式之 工厂方法模式的实例介绍

Unity 设计模式之 工厂方法模式的实例介绍

Unity 设计模式之 工厂方法模式的实例介绍

Unity 设计模式之 工厂方法模式的实例介绍

Unity 设计模式之 工厂方法模式的实例介绍

Unity 设计模式之 工厂方法模式的实例介绍

Unity 设计模式之 工厂方法模式的实例介绍

4、Product 脚本具体内容如下:

/// <summary>

/// 抽象产品,定义工厂方法中所创建的对象

/// </summary>

public abstract class Product  {

    //构造函数

    public Product(){}

    public abstract void Operation();

}

5、ProductA 脚本具体内容如下:

using UnityEngine;

/// <summary>

/// 具体产品A,继承自Product

/// </summary>

public class ProductA : Product {

    public ProductA() {    }

    public override void Operation ()

    {

        Debug.Log ("产品 A");

    }

}

6、ProductB 脚本具体内容如下:

using UnityEngine;

/// <summary>

/// 具体产品B,继承自Product

/// </summary>

public class ProductB : Product {

    public ProductB(){}

    public override void Operation ()

    {

        Debug.Log ("产品 B");

    }

}

7、Factory 脚本具体内容如下:

/// <summary>

/// 抽象工厂,声明了一个创建Product的方法

/// </summary>

public abstract class Factory  {

    /// <summary>

    /// 该方法用来返回Product产品

    /// </summary>

    /// <returns>The product.</returns>

    public abstract Product CreateProduct ();

}

8、ProductAFactory 脚本具体内容如下:

/// <summary>

/// 具体产工厂,产品类 A 的创建者,继承自抽象工厂Creator

/// </summary>

public class ProductAFactory : Factory {

    public override Product CreateProduct ()

    {

        return new ProductA ();

    }

}

9、ProductBFactory 脚本具体内容如下:

/// <summary>

/// 具体产工厂,产品类 B 的创建者,继承自抽象工厂Creator

/// </summary>

public class ProductBFactory : Factory {

    public override Product CreateProduct ()

    {

        return new ProductB ();

    }

}

10、Test 脚本具体内容如下:

using UnityEngine;

public class Test : MonoBehaviour {

    // Use this for initialization

    void Start () {

            }

        // Update is called once per frame

    void Update () {

        //生成产品 A

        if (Input.GetKeyDown (KeyCode.A)) {

            Factory AFactory = new ProductAFactory ();

            Product productA = AFactory.CreateProduct ();

            productA.Operation ();

        }

        //生成产品 B

        if (Input.GetKeyDown (KeyCode.B)) {

            Factory BFactory = new ProductBFactory ();

            Product productB = BFactory.CreateProduct ();

            productB.Operation ();

        }

    }

}

11、脚本编译正确,回到Unity界面,在场景中新建一个 GameObject,并把 Test 脚本赋给 GameObject,具体如下图

Unity 设计模式之 工厂方法模式的实例介绍

12、运行场景,分别按下 A、B 键,控制台 Console 打印如下图

Unity 设计模式之 工厂方法模式的实例介绍

13、到此,《Unity 设计模式之 工厂方法模式的实例介绍》讲解结束,谢谢

  • Unity 设计模式之 模板方法模式的实例介绍
  • Unity 设计模式之 原型模式的实例介绍
  • Unity 设计模式之 代理模式的实例介绍
  • Unity 设计模式之 桥接模式的实例介绍
  • unity3d中如何导入3dmax创建的模型
  • 热门搜索
    鸡翅怎么做好吃又简单 怎么写新闻 ps怎么返回上一步 怎么知道自己的血型 泰拉瑞亚怎么钓鱼 比熊犬怎么训练 过敏了怎么办 电视怎么投屏 中国人寿怎么样 毛孔粗大怎么办