设计模式01———简单工厂模式 c#

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

首先我们打开一个项目

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

在这个初始界面我们需要做一些准备工作

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

建基础通用包

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

创建一个Plane 重置后 缩放100倍 加一个颜色

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

任务:使用【简单工厂模式】生成四种不同怪物 【按不同路径移动】

首先资源商店下载四个怪物模型

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

接下来我们选取四个怪物作为预制体并分别起名为Monster1-4

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

都完全解压缩后放进预制体包在场景中删除

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

准备工作做完后    接下我们做【简单工厂模式】

简单工厂不属于23设计模式中的一项但是23设计模式中抽象工厂的基础

简单工厂最低需要三个类就可以完成加上Main类中调用也就四个

首先需要    【抽象产品类】

其次需要    【具体产品类】

再其次需要【生产工厂类】

最后我们通过Main继承Mono挂载再脚本上调用即可

实现:

1.创建脚本【抽象产品类】:

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

using UnityEngine;
public abstract class IMonster {
    public GameObject Monster {get;set;}
    public abstract void Load();
}

2.【具体产品类】:

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

using UnityEngine;
namespace Assets.Scripts.Product{
    class MonsterA : IMonster{
        public override void Load(){
            Monster = Resources.Load<GameObject>("Prefabs/monster1");
            if(Monster != null)
                Monster = GameObject.Instantiate(Monster,new Vector3(0,0,0),Quaternion.identity);
        }
    }
}

3.【生产工厂类】

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

using Assets.Scripts.Product;
namespace Assets.Scripts.SimpleFactory{
    public static class Factory{
        public static IMonster GetMonster(string type) {
            IMonster monster;
            switch (type) {
                case "monsterA":
                    monster = new MonsterA();
                    break;
                default:
                    monster = null;
                    break;
            }
            return monster;
        }
    }
}
4.【控制挂载类】

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

using Assets.Scripts.SimpleFactory;
using UnityEngine;
namespace Assets.Scripts{
    public class Main : MonoBehaviour{
        public IMonster monster;
        public string type;
        private void Start(){
            monster = Factory.GetMonster("monsterA");
            monster.Load();
        }
    }
}

我们回到unity场景中创建一个空物体改名Obj 重置位置 将Main脚本挂载

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

运行即可生成

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

接下来我们创建   多个【具体产品类】

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

当然也需要在其他类里添加 这就是简单工厂不好的地方 增一类 动三类

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

运行即可实现:

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

目前【简单工厂模式】已经完成

接下来我们将生成的怪物 按不同路径移动

原理:

【通过使小球(WayPoint)作为引导使怪物进行自动导航】

我们首先在unity场景中创建一个3D小球 改名为 WayPoint

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

将WayPoint放进预制体包 并在场景中移除

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

接下来通过预制体  拖拽至场景中放置不同路径

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

我们放大Plane

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

接下来创建一个空父物体代表移动路径 改名PathA

将所有WayPoint放进PathA下做子类

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

接下来创建移动脚本Move

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

将以下代码放进Move

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

using UnityEngine;
public class Move : MonoBehaviour{
    public Transform[] arr;
    public float speed = 1f;       
    public int idx = 0;   
    void Start(){
        Transform path = GameObject.Find("PathA").transform;
        if (path != null){
            arr = new Transform[path.childCount];
            for (int i = 0; i < arr.Length; i++)
                arr[i] = path.GetChild(i);
        }
        else
            Debug.LogError("查找路径点父物体失败 检查父物体名字");
    }
    private void Update(){
        Vector3 direction = arr[idx].position - transform.position;
        transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direction), 0.1f);
        transform.Translate(Vector3.forward * speed);
        if (direction.sqrMagnitude < 1f){
            idx++;
            if (idx > arr.Length - 1)
                idx = 0;
        }
    }
}

将Move挂载到四个怪物预制体上

运行前设计模式01———简单工厂模式 c#,设计模式,简单工厂模式

运行后

设计模式01———简单工厂模式 c#,设计模式,简单工厂模式文章来源地址https://www.toymoban.com/news/detail-726918.html

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

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

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

相关文章

  • 【创建型设计模式】C#设计模式之工厂模式,以及通过反射实现动态工厂。

    题目如下: 简单工厂实现: 上述代码给出了抽象基类的基本定义,和泛型工厂的实现方式,以及调用方式。 值得注意的是 where T : Car, new() 这个条件: where T : Car, new() 是对泛型类型参数 T 的约束。这个约束表明泛型类型参数 T 必须满足两个条件: T 必须是 Car 类或者其派生类

    2024年02月11日
    浏览(27)
  • 设计模式-简单工厂模式(静态工厂模式)java实现

    简单工厂模式根据所 提供的参数 数据返回几个可能类中的一个类的实例。通常返回的类都有一个公共的父类和公共的方法。   意图 提供一个类,负责根据一定的条件创建某一具体类的实例。同时使用工厂模式也是为了隐藏创建对象的过程 角色及其职责 (1)工厂(Creator)角色

    2024年02月13日
    浏览(37)
  • C#设计模式教程(3):抽象工厂模式

    抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建一系列相关或相互依赖对象的家族,而无需指定它们具体的类。这种模式是工厂方法模式的一种扩展,它用于创建的不是一个产品,而是多个产品的家族。 以下是C#中实现抽象工厂模式的一个简单示例: 首先

    2024年01月19日
    浏览(30)
  • C#设计模式教程(2):工厂方法模式

    工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 以下是C#中实现工厂方法模式的一个简单示例: 首先,定义一个抽象产品(Product)类,它是所有具体产品的基类。 接着,创

    2024年01月19日
    浏览(24)
  • 设计模式(简单工厂模式)

    从建筑设计领域引入到计算机科学中 设计模式一共有23种 代码设计经验的总结,稳定,拓展性更强。一系列编程思想 作用:代码更容易被他人理解、保证代码可靠性、程序的重用性。 详细介绍:[https://www.runoob.com/design-pattern/design-pattern-tutorial.html]: 学习简单工厂模式的目的:

    2024年02月13日
    浏览(32)
  • 设计模式-简单工厂模式

    简单工厂模式又称为静态工厂模式,其实就是根据传入参数创建对应具体类的实例并返回实例对象,这些类通常继承至同一个父类,该模式专门定义了一个类来负责创建其他类的实例。  这就是工厂类,提供一个方法创建具体类的实例 优点:将对象的创建于使用分离,创建完

    2024年02月12日
    浏览(29)
  • 【设计模式】简单工厂模式

    分析: 这一题看上去很简单,但如果面试时你写的是下面这种代码,那大概率是过不了的。 上面代码也能实现题目的功能,但是代码没有错就是好的吗? 以上代码复用性低;可维护性差,如果要改+的逻辑,就会牵一发而动全身;扩展性差,如果这个时候新增开平方的逻辑怎

    2024年02月12日
    浏览(30)
  • 聊聊设计模式--简单工厂模式

    ​ 前面也学了很多各种微服务架构的组件,包括后续的服务部署、代码管理、Docker等技术,那么作为后端人员,最重要的任务还是代码编写能力,如何让你的代码写的漂亮、易扩展,让别人一看赏心悦目,那么设计模式就是很重的了。那么本本篇文章就来聊聊一个简单的工厂

    2024年02月07日
    浏览(33)
  • JavaScript设计模式(二)——简单工厂模式、抽象工厂模式、建造者模式

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,正逐渐往全干发展 📃 个人状态: 研发工程师,现效力于中国工业软件事业 🚀 人生格言: 积跬步至千里,积小流成江海 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒

    2024年02月10日
    浏览(33)
  • [设计模式]创建型模式-简单工厂模式

    简单工厂模式又称为静态工厂模式,属于创建型模式,但不属于GOF23设计模式。由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 简单工厂适用场景:工厂类负责创建的对象比较少;客户

    2024年02月20日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包