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 ...
随机推荐
- 如何在ABAP Netweaver和CloudFoundry里记录并查看日志
Netweaver 要记录日志需要有一个checkpoint group,可以自行创建也可以使用标准的.这里我重用标准的group:DEMO_CHECKPOINT_GROUP. tcode SAAB, ...
- [转]Cannot deserialize the current JSON array (e.g. [1,2,3]) into type
string content =[{"id": 3636, "is_default": true, "name": "Unit&q ...
- 全面了解linux情况常用命令
查看linux服务器CPU详细情况1. 显示CPU个数命令 # cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc ...
- 【BZOJ4458】GTY的OJ(树上超级钢琴)
点此看题面 大致题意: 给你一棵树,让你求出每一个节点向上的长度在\([l,r]\)范围内的路径权值和最大的\(m\)条路径的权值总和. 关于此题的数列版本 此题的数列版本,就是比较著名的[BZOJ2 ...
- head与body(新手向)
网页文档包含了页头(head)与主体(body) 页头 -是对该网页文档进行描绘的主体信息. -至少含有title与meta. meta描述网页的特征,比如字符编码,平时广泛用的utf-8.且meta ...
- 零基础快速入门SpringBoot2.0 (一)
零基础快速入门SpringBoot2.0 (一) 一.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 1.依赖版本jdk8以上, Spr ...
- linux下避免僵尸进程的几种方法
linux下我们可以调用fork函数创建子进程,创建的子进程将会得到父进程的数据空间.堆.栈......副本(采用写时复制机制),子进程将会继承父进程的信号掩码.信号处理方式.当前工作目录.会话id. ...
- Jquery 就是怎么取得一个select的当前值
<select id="cursel">: <option value="1">值1</option>: <optio ...
- 【php】如何配置自主域名腾讯企业邮箱
腾讯企业邮配置 protocal ssl smtp port 465 host smtp.exmail.qq.com user email account passwd email passwd
- Python全栈学习:匿名函数使用规范
匿名函数,当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x) ...