浅谈C#在unity应用中的工厂模式

这篇具有很好参考价值的文章主要介绍了浅谈C#在unity应用中的工厂模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

工厂模式是一种创建型设计模式,它提供了一种将对象的实例化过程封装起来的方法,使得客户端代码不必直接依赖于具体类。这有助于降低代码的耦合度,提高代码的可维护性和可扩展性。在C#中,有三种常见的工厂模式:简单工厂模式工厂方法模式抽象工厂模式。下面详细解释这三种工厂模式。


简单工厂模式

简单工厂模式是最基本的工厂模式,它通过一个工厂类来创建对象。客户端只需要知道要创建的产品的类型,而不需要知道具体的实现类。

  • 首先定义一个抽象产品类。该类主要定义了产品的共有属性和方法,用于子类继承和实现。
public abstract class Car
{
    public abstract void GetName();

    public void Refuel()
    {
        Console.WriteLine("汽车加油");
    }
}
  • 其次定义每个产品的具体实现子类。该类实现并继承自抽象类,如需增加产品可直接创建新的子类并继承自抽象类即可。
public class FordCar: Car
{
    public override void GetName()
    {
        Console.WriteLine("我是福特汽车");
    }
}

public class HondaCar: Car
{
    public override void GetName()
    {
        Console.WriteLine("我是本田汽车");
    }
}
  • 然后定义核心类,即工厂类。该类通过创建了一个枚举类型参数来选择需要创建的产品实例。
public class CarFactory
{
    public static Car CreateCar(CarType carType)
    {
        switch (carType)
        {
            case CarType.FordCar:
                return new FordCar();
                break;
            case CarType.HondaCar:
                return new HondaCar();
                break;
            default:
                break;
        }
        return null;
    }

    public enum CarType
    {
        FordCar,
        HondaCar
    }
}
  • 最后客户端调用。
class Program
{
    static void Main(string[] args)
    {
        //通过CarFactory产品工厂创建了FordCar产品实例
        Car car = CarFactory.CreateCar(CarFactory.CarType.FordCar);
        car.GetName();

        //通过CarFactory产品工厂创建了HondaCar产品实例
        car = CarFactory.CreateCar(CarFactory.CarType.HondaCar);
        car.GetName();
        car.Refuel();
    }
}

对于客户端来说,其去除了与具体产品之间的依赖。

简单工厂模式的缺点主要就是违背开闭原则


工厂方法模式

这是一种更高级的工厂模式,它通过抽象接口或基类中的工厂方法来创建对象。

具体实现由子类负责,因此更加灵活。这种设计方式有利于实现开闭原则,即对扩展开放,对修改封闭

  • 抽象产品类:
public abstract class Car
{
    public abstract void GetName();

    public void Refuel()
    {
        Console.WriteLine("汽车加油");
    }
}
  • 具体产品类:
public class FordCar: Car
{
    public override void GetName()
    {
        Console.WriteLine("我是福特汽车");
    }
}

public class HondaCar: Car
{
    public override void GetName()
    {
        Console.WriteLine("我是本田汽车");
    }
}
  • 抽象工厂:
public abstract class CarFactory
{
    public abstract Car CreateCar();
}
  • 具体产品工厂:
public class FordCarFactory: CarFactory
{
    public override Car CreateCar()
    {
        return new FordCar();
    }
}

public class HondaCarFactory: CarFactory
{
    public override Car CreateCar()
    {
        return new HondaCar();
    }
}
  • 客户端调用:
class Program
{
    static void Main(string[] args)
    {
        //创建一个汽车工厂,只负责生产福特汽车产品
        CarFactory carFactory = new FordCarFactory();
        //在福特汽车工厂中生产一个福特汽车产品
        Car car = carFactory.CreateCar();
        car.GetName();

        //创建一个汽车工厂,只负责生产本田汽车产品
        carFactory = new HondaCarFactory();
        //在本田汽车工厂中生产一个本田汽车产品
        car = carFactory.CreateCar();
        car.GetName();
        //汽车加油
        car.Refuel();
    }
}

抽象工厂模式

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。它是工厂方法模式的推广,不仅仅创建一个对象,而是创建一系列相关的对象。

  • 抽象产品类,有多少个不同产品就创建多少个抽象产品类。实例中创建了两种产品,即汽车和轮胎。
public abstract class Car
{
    public abstract void GetName();

    public void Refuel()
    {
        Console.WriteLine("汽车加油");
    }
}
public abstract class Tire
{
    public abstract void GetName();
}
  • 具体产品类,不同产品继承不同抽象类。实例中定义了两种汽车和两种轮胎,汽车为一个产品等级,轮胎是另外一个产品等级。
public class FordCar: Car
{
    public override void GetName()
    {
        Console.WriteLine("我是福特汽车");
    }
}

public class HondaCar: Car
{
    public override void GetName()
    {
        Console.WriteLine("我是本田汽车");
    }
} 

public class FordTire: Tire
{
    public override void GetName()
    {
        Console.WriteLine("我是福特轮胎。");
    }
}

public class HondaTire: Tire
{
    public override void GetName()
    {
        Console.WriteLine("我是本田轮胎。");
    }
}
  • 抽象工厂类,有多少个系列就可以创建多少个抽象工厂类。
public abstract class CarFactory
{
    //生产汽车
    public abstract Car CreateCar();
    //生产轮胎
    public abstract Tire CreateTire();
}
  • 具体工厂类,同一系列可以创建多个具体的工厂,负责同一系列下的不同产品出的创建。
public class FordCarFactory: CarFactory
{
    public override Car CreateCar()
    {
        return new FordCar();
    }

    public override Tire CreateTire()
    {
        return new FordTire();
    }
}

public class HondaCarFactory: CarFactory
{
    public override Car CreateCar()
    {
        return new HondaCar();
    }

    public override Tire CreateTire()
    {
        return new HondaTire();
    }
}
  • 客户端调用:
class Program
{
    static void Main(string[] args)
    {
        //首先创建一个汽车工厂
        CarFactory carFactory = new FordCarFactory();
        //然后对应工厂中生产出对应的不同产品。
        Car car = carFactory.CreateCar();
        car.GetName();
        Tire tire = carFactory.CreateTire();
        tire.GetName();

        carFactory = new HondaCarFactory();
        car = carFactory.CreateCar();
        car.GetName();
        tire = carFactory.CreateTire();
        tire.GetName();
    }
}

Unity实战

https://dingxiaowei.cn/2017/05/14/文章来源地址https://www.toymoban.com/news/detail-759080.html

到了这里,关于浅谈C#在unity应用中的工厂模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 工厂方法模式(实例详解)

    封装创建过程 :工厂模式将对象的创建过程封装在一个单独的类(即工厂类)中,客户端无需知道如何创建具体的产品对象,只需调用工厂类的方法即可获取所需产品。 分离接口和实现 :通过工厂模式,可以将产品的抽象接口与其实现细节分离开来。客户端代码仅依赖于抽

    2024年01月22日
    浏览(27)
  • ༺༽༾ཊ—Unity之-02-简单工厂模式—ཏ༿༼༻

     首先我们打开一个项目 在这个初始界面我们需要做一些准备工作 建基础通用包 创建一个Plane 重置后 缩放100倍 加一个颜色 任务:使用【简单工厂模式】生成四种不同怪物 【按不同路径移动】 首先资源商店下载四个怪物模型 接下来我们选取四个怪物作为预制体并分别起名

    2024年01月22日
    浏览(21)
  • unity3d在汽车邻域应用浅谈

    Unity3D是一款实时3D内容创作软件,它在汽车应用创新方面发挥了重要作用。以下是Unity3D在汽车应用创新方面的几个关键领域: 智能座舱:Unity3D为汽车智能座舱提供了解决方案,通过重新定义座舱设计,将车舱打造成全新的“第三空间”。这种解决方案不仅提供了炫目的视效

    2024年01月24日
    浏览(47)
  • 浅谈C#中await运算符在不同类型应用中的不同行为

    C#中的await运算符,因其不会阻塞主线程,可以给用户更好的操作体验,所以广泛的应用于各种C#的应用中。 本文主要分析其在Console程序,Winform程序和WebApi程序中,其工作行为的异同点,来更好的使用该运算符。 await运算符的基本功能是挂起当前的async方法,并直到异步方法

    2024年02月16日
    浏览(32)
  • Unity3D在车载导航系统的应用场景浅谈

    Unity3D在车载导航系统的应用场景非常广泛,它可以为车载导航系统带来更加逼真、直观和准确的使用体验。以下是几个具体的应用场景: 3D地图导航:Unity3D的实时3D渲染能力使得车载导航系统可以实现3D地图导航功能。通过Unity3D,可以生成超写实风格的3D地图,提供更加逼真

    2024年01月23日
    浏览(56)
  • 虚拟现实开发在工厂生产环境模拟与培训中的应用

    hello老铁们...本人熟悉html5,vue对bootsrap,uniapp,layui,element,vite,antd,echarts,jq响应式尤其擅长,ui设计等技能,如果ui前端工作中有遇到烦恼可私信关注评论我们共同交流进步!谢谢 随着科技的飞速发展,虚拟现实(VR)技术已经成为当今世界的热门话题。虚拟现实技术为

    2024年03月26日
    浏览(45)
  • 笔记_Unity中的C#编程_112-116

    Microsoft新一代多语言的开发平台,用于构建和运行应用程序 Microsoft 专为.NET推出的高级语言 ##Mono NOvell公司支持在其他操作系统下开发.NET程序的框架 Unity借助Mono实现跨平台,核心是.NET Framework 框架 脚本 是附加在游戏物体上用于定义游戏对象行为的指令代码,就是.cs的文本文

    2023年04月20日
    浏览(34)
  • unity C#中的封装、继承和多态简单易懂的经典实例

    C#中的封装、继承和多态是面向对象编程(OOP)的三大核心特性。下面分别对这三个概念进行深入解释,并通过实例来说明它们在实际开发中的应用。 封装 (Encapsulation) 实例1: 在这个例子中, BankAccount 类封装了账户余额(balance),外部不能直接修改它,只能通过 Deposit 和

    2024年02月22日
    浏览(48)
  • Unity常用设计模式-策略模式:游戏中的智慧选择

    一、什么是策略模式?        策略模式是一种行为设计模式,它定义了一系列算法,并使得这些算法可以相互替换,而使得使用算法的客户端代码不受影响。在策略模式中,算法被封装成独立的类,使得它们可以独立于客户端而变化。这种模式提供了一种简单而强大的方法

    2024年02月20日
    浏览(40)
  • Unity 游戏开发、03 基础篇 | C#初级编程

    https://learn.u3d.cn/tutorial/beginner-gameplay-scripting Update(不是按固定时间调用的) 经常用于 移动非物理特性的物体(不是物理对象) 简单定时器 接收输入 FixedUpdate(调用时间间隔相同) 进行任何必要的物理计算(任何物理对象) 最好使用力来定义移动 使用 IDE 的 Unity Event Func

    2024年02月08日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包