Unity3D - 设计模式 - 工厂模式
工厂模式:以食物生产为例
1. 一个生产食物的工厂(此项 需要建立两个类:食物基类<Food>,工厂类<Factory>)
2. 可以生产不同的食物(此项 建立食物的具体子类,均继承食物的基类)
3. 运行程序生成不同的食物(此项 建立程序运行的主类 继承鱼MonoBehaviour,创建工厂类变量、食物基类变量,然后再Start方法里给食物基类变量赋值<通过传入参数的不同 将父类指向一个子类>)

using System.Collections;
using System.Collections.Generic;
using UnityEngine; /// <summary>
/// 测试工厂模式
/// </summary> // 创建实物的基类
public class Food
{
public virtual void ShowMe ()
{
Debug.Log ("这是实物基类");
}
}
// 西红柿类
public class TomatoFood:Food
{
public override void ShowMe ()
{
// 掉父类方法
base.ShowMe (); Debug.Log ("TomatoFood");
}
}
// 鸡蛋
public class EggFood:Food
{
public override void ShowMe ()
{
base.ShowMe (); Debug.Log ("EggFood");
}
} public class Factory
{
public Food MakeFood (string name)
{
if (name == "egg") {
return new EggFood ();
} else if (name == "tomato") {
return new TomatoFood ();
}
return null;
}
} public class Main : MonoBehaviour
{
Factory factory = new Factory ();
Food food1;
Food food2; public void Start ()
{
food1 = factory.MakeFood ("egg");
food1.ShowMe (); food2 = factory.MakeFood ("tomato");
food2.ShowMe ();
}
}
以Resources加载游戏物体为例
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; public class SpriteFactory : MonoBehaviour
{
public Object[] allSprit;
private int allIndex = ;
private Transform canvasTransform; /// <summary>
/// 加载 Resources 文件夹下的资源
/// </summary>
void Start ()
{
canvasTransform = GameObject.Find ("Canvas").transform;
LoadSprite ("Number");
} void Update ()
{
if (Input.GetKeyDown (KeyCode.A)) {
allIndex++;
GameObject tempObj = GetImage (allIndex);
tempObj.transform.parent = canvasTransform;
tempObj.transform.position = new Vector3 (allIndex * , , );
}
} /// <summary>
/// 加载Resources文件夹下指定名称的资源
/// </summary>
/// <param name="name">指定名称</param>
public void LoadSprite (string name)
{
allSprit = Resources.LoadAll (name);
} /// <summary>
/// 加载指定索引的资源,并把该资源显示出来
/// </summary>
/// <returns>返回一个新生成的物体,该物体显式刚刚加载的资源</returns>
/// <param name="index">给出要加载资源的一个索引</param>
public GameObject GetImage (int index)
{
GameObject tempObj = new GameObject ("tempObj");
Image tempImage = tempObj.AddComponent<Image> ();
tempImage.sprite = allSprit [index] as Sprite;
return tempObj;
}
}
Unity3D - 设计模式 - 工厂模式的更多相关文章
- .NET设计模式: 工厂模式
.NET设计模式: 工厂模式(转) 转自:http://www.cnblogs.com/bit-sand/archive/2008/01/25/1053207.html .NET设计模式(1): ...
- 【设计模式】Java设计模式 -工厂模式
[设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...
- [Head First设计模式]饺子馆(冬至)中的设计模式——工厂模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- javascript 设计模式-----工厂模式
所谓的工厂模式,顾名思义就是成批量地生产模式.它的核心作用也是和现实中的工厂一样利用重复的代码最大化地产生效益.在javascript中,它常常用来生产许许多多相同的实例对象,在代码上做到最大的利用. ...
- JavaScript设计模式——工厂模式
工厂模式:是一种实现“工厂”概念的面上对象设计模式.实质是定义一个创建对象的接口,但是让实现这个接口的类来决定实例化哪个类.工厂方法让类的实例化推迟到子类中进行.创建一个对象常常需要复杂的过程,所以不 ...
- 10.Java设计模式 工厂模式,单例模式
Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...
- 学习:java设计模式—工厂模式
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Facto ...
- 设计模式——工厂模式 (C++实现)
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装.继承.多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累. ...
- Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)
工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...
随机推荐
- gearmand 编译 Unable to find libevent
如果出现configure: error: Unable to find libevent,则输入命令:yum -y install libevent libevent-devel然后重新config ...
- python_63_装饰器6
#decorator意思:1.装饰器 2.语法糖 import time user,passwd='qi','123' def auth(func): def wrappper(*args, **kw ...
- HttpServletRequest HttpServletResponse ServletException 重新打开后报红解决方法
tomcat安装路径下\lib\servlet-api.jar 复制到Dynamic Web Project 的 WEB-INF/lib下,刷新
- 网络流_spfa最小费用最大流
最大流: 不断搜索增广路,寻找最小的容量-流量,得到最大流量,但最大流量在有花费时不一定是最小花费. 最小费用最大流 算法思想: 采用贪心的思想,每次找到一条从源点到达汇点的花费最小的路径,增加流量, ...
- 一、MySQL 安装
MySQL 安装 所有平台的 MySQL 下载地址为: MySQL 下载 . 挑选你需要的 MySQL Community Server 版本及对应的平台. 注意:安装过程我们需要通过开启管理员权限来 ...
- Spring的datasource配置详解【转】
一句话,Spring对Hibernate的整合,是在applicationContext.xml中配置sessionFactory来实现的,其中sessionFactory中要装配dataSource ...
- nuxt.js express模板项目虚拟目录部署问题汇总
声明环境 反向代理:nginx或者iis的ARR 模板项目:nuxt-express 部署环境:windows 经过了一段时间在windows环境部署项目来看,关于虚拟目录的问题汇总如下, 发布场景假 ...
- Nodejs NPM CNPM优雅安装install
由于npm和cnpm都能安装组件,安装的组件有的保存在c盘用户目录的Appdata隐藏目录下,有的保存在安装node的目录下,而且安装在c盘的话,重装系统又得重新部署,甚是麻烦,所以这里提供优雅安装的 ...
- ZendFramework-2.4 源代码 - 开始
ZendFramework 是一种PHP框架. 写在前面 最早遇到ZendFramework是在阅读一款叫Magento电子商务系统源代码时看到,后来因为工作,把注意力侧重在其他方面,就搁置了继续了解 ...
- JS的四舍五入问题
最近踩了一个坑,mark一下toFixed四舍五入问题,详见代码: var myFixed = function(num, fix) { num = (parseFloat(num) * + ) / ...