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 ...
随机推荐
- Centos7安装 PostgreSQL步骤
1. 安装服务器即可. Yum install postgresql-server Yum install postgresql-contrib 2. 验证是否安装成功: rpm -aq| grep ...
- innobackupex 全备、增备脚本
全备脚本:innobackupex --defaults-file=/etc/my.cnf --user root --password mypasswd /mydata/fullbak/ 增备脚本: ...
- maven操作手册
===Maven的安装=== http://blog.csdn.net/yang5726685/article/details/56486479 ===Maven的jar包仓库地址配置=== http ...
- 输出流缓冲的意义 何时缓冲 Stdout Buffering
From : https://eklitzke.org/stdout-buffering 译者:李秋豪 大多数编程语言默认提供了i/o缓冲特性,因为这会使得输出更加有效率.这些缓冲功能大都是默默工作& ...
- 纯js实现淘宝商城轮播图
需求: 循环无缝自动轮播3张图片,点击左右箭头可以手动切换图片,鼠标点击轮播图下面的小圆点会跳转到对应的第几张图片.鼠标放到轮播图的图片上时不再自动轮播,鼠标移开之后又继续轮播.效果图: 下面是htm ...
- Luogu P1471 方差
题目传送门 开了十倍空间才过是什么鬼?该不会我线段树炸了吧-- 细思极恐 平均数都会求,维护区间和,到时候除一下就好了. 方差的求法如下 (用的Luogu的图片) 因为要维护一个平方,我们可以考虑使用 ...
- ArrayList集合例题,商品库存管理(集合)
创建车库集合,存进车 public class demo1 { String pinpai; String c; int s; } import java.util.ArrayList; class ...
- MongoDB+nodejs查询并返回数据
const express = require('express');const router = express.Router(); const Monk = require('monk');con ...
- 转:CentOS7 下 Redis4 安装与配置教程(Redis开机启动)
转 https://ken.io/note/centos7-redis4-setup 一.前言 1.本教程主要内容 Redis安装与测试 Redis远程访问配置 Redis开机启动配置 2.本教程环境 ...
- JS - 箭头函数与 () {} 的作用域
foo () { // ... } 等价于 foo: function () { // ... } foo: () => { // ... } 范例: // 全局 name = 'zhangsa ...