工厂模式:以食物生产为例

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 - 设计模式 - 工厂模式的更多相关文章

  1. .NET设计模式: 工厂模式

    .NET设计模式: 工厂模式(转) 转自:http://www.cnblogs.com/bit-sand/archive/2008/01/25/1053207.html   .NET设计模式(1): ...

  2. 【设计模式】Java设计模式 -工厂模式

    [设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...

  3. [Head First设计模式]饺子馆(冬至)中的设计模式——工厂模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  4. javascript 设计模式-----工厂模式

    所谓的工厂模式,顾名思义就是成批量地生产模式.它的核心作用也是和现实中的工厂一样利用重复的代码最大化地产生效益.在javascript中,它常常用来生产许许多多相同的实例对象,在代码上做到最大的利用. ...

  5. JavaScript设计模式——工厂模式

    工厂模式:是一种实现“工厂”概念的面上对象设计模式.实质是定义一个创建对象的接口,但是让实现这个接口的类来决定实例化哪个类.工厂方法让类的实例化推迟到子类中进行.创建一个对象常常需要复杂的过程,所以不 ...

  6. 10.Java设计模式 工厂模式,单例模式

    Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...

  7. 学习:java设计模式—工厂模式

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Facto ...

  8. 设计模式——工厂模式 (C++实现)

    软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装.继承.多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累. ...

  9. Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...

随机推荐

  1. echarts 相关属性介绍

    title: {//图表标题     x: 'left', //组件离容器左侧的距离,left的值可以是像20,这样的具体像素值, 可以是像 '20%' 这样相对于容器高宽的百分比,也可以是 'lef ...

  2. memcached for .net on windows

    memcached for windowshttp://www.cnblogs.com/dudu/archive/2009/07/19/1526407.htmlhttp://www.cnblogs.c ...

  3. Finite Encyclopedia of Integer Sequences(找规律)

    6617: Finite Encyclopedia of Integer Sequences 时间限制: 1 Sec  内存限制: 128 MB提交: 375  解决: 91[提交] [状态] [讨论 ...

  4. 感谢我的python老师

    Python自动化开发(金角大王版) http://www.cnblogs.com/alex3714/articles/5885096.html

  5. MRCA|Wright–Fisher population genetic model|SNP rate

    (Panda has a high heterozygosity rate) 通过对mtDNA(为了预测SNP的密度)的分析,可知panda的多样性,当前全基因组数据才能完全建立模型. mitocho ...

  6. Oracle Undo 和 Redo

    1. REDO(重做信息) Redo log file(重做日志文件),是数据库的事务日志. Oracle维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日志文件 ...

  7. JS中的引用、浅拷贝和深拷贝

    js的深拷贝浅拷贝是很常遇到的问题,一直模模糊糊有点说不过去,所以这次好好总结一下. 1.js的引用 JS分为基础类型和引用类型两种数据类型: 基础类型:number.string.boolean.n ...

  8. 自动化测试 ubuntu多设备连接不识别

    环境: ubuntu系统 usb2.0 16个口集线器 遇到问题: 连接手机到第11台设备时出现adb devices不显示的现象导致无法通过adb操作 问题排除思路; 1.通过dmesg查看设备连接 ...

  9. Java - Java 中的三种 ClassLoader

    1.虚拟机类加载器(称为“bootstrap class loader”),它本身没有父类加载器,它负责加载虚拟机的内置类,由于它是用C.C++写的,所以Java无法拿到其class文件,返回的都是空 ...

  10. h5中的video与audio

    ·首先带大家熟悉一下video标签的属性方法,根据属性方法做一个小demo, HTML5支持的视频格式: Ogg 带有Theora视频编码+Ogg文件 支持的浏览器:F.O MEPG4  带有H.26 ...