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

2025-11-15 03:52:41

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 设计模式之 工厂方法模式的实例介绍》讲解结束,谢谢

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢