using UnityEngine;
//苹果手机
public class IPhone : Config
{
public void Chip()
{
Debug.Log("使用A14芯片");
}
}
3、具体产品:XiaoMi
using UnityEngine;
//小米手机
public class XiaoMi : Config
{
public virtual void Chip()
{
Debug.Log("使用高通芯片");
}
}
4、工厂类:ConcreteProduct
public class ConcreteProduct
{
//生产工厂,供外部调用
public static Config Create(int id)
{
switch (id)
{
case 1:
return new XiaoMi();
case 2:
return new IPhone();
}
return null;
}
}
using UnityEngine;
public class IPhoneFactory : IFactory
{
public IConfig Create()
{
Debug.Log("这个工厂生产了 IPhoneAllConfig 配置的苹果手机");
return new IPhoneAllConfig();
}
}
3、具象工厂:XiaoMiFactory
using UnityEngine;
public class XiaoMiFactory : IFactory
{
public IConfig Create()
{
Debug.Log("这个工厂生产了 XiaoMiAllConfig 配置的小米手机");
return new XiaoMiAllConfig();
}
}
二、迭代器模式
迭代器模式: 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
Unity中实现迭代器模式的API是 foreach。
但是,foreach可能不包含我们想要的功能,
下面,我们就来自己实现一个通用的迭代器。
使用方法是:
1、首先自己的迭代器继承基础脚本的类:IEnumerable,可覆写里面的方法。
2、接着就可以使用啦!
基础类1:Iterator
using System.Collections.Generic;
public class Iterator : IteratorBase
{
private IList
基础类2:IEnumerable
using System.Collections.Generic;
public interface IteratorBase
{
object Current { get; }
int Count { get; }
bool MoveNext();
///
/// 将当前指针移动到第一位
///
void Reset();
}
public class IEnumerable
{
private IList items = new List();
public virtual int Count => items.Count;
public virtual object this[int index]
{
get { return items[index]; }
set { items.Insert(index, value); }
}
public virtual IteratorBase GetIterator()
{
return new Iterator(items);
}
}
迭代器示例:Group
继承IEnumerable就好,Group便已实现了迭代器模式
你可以重写、拓展你的迭代器,实现想要的功能
using UnityEngine;
public class Group : IEnumerable
{
public override IteratorBase GetIterator()
{
Debug.Log("你可以重写你的迭代器");
return base.GetIterator();
}
}
下面是最后一步,有的同学别睡觉,敲黑板
使用示例:Test
using UnityEngine;
public class Test : MonoBehaviour
{
private void Start()
{
Group myGroup = new Group();
myGroup[0] = "s";
myGroup[0] = "k";
myGroup[0] = "o";
myGroup[0] = "d";
myGroup[0] = "e";
print(myGroup.Count);
IteratorBase iterator = myGroup.GetIterator();
print(iterator.Count);
while (iterator.MoveNext())
{
print("当前元素是:" + iterator.Current);
}
}
}
三、命令模式
命令模式是游戏中很有用的设计模式,书中有一句话是这样说的:
Encapsulate a request as an object, thereby letting users parameterize clients with different requests, queue or log requests, and support undoable operations. —《Design Patterns: Elements of Reusable Object-Oriented Software》
using UnityEngine;
public class BoxCommand : command
{
Vector3 _trans;
public BoxCommand(Vector3 m, float t)
{
_trans = m;
_time = t;
}
public override void Execute(BoxEntity avator)
{
avator.move(_trans);
}
public override void Undo(BoxEntity avator)
{
avator.move(-_trans);
}
}
1. If语句作为表达式
val properties = if (jobIdToActiveJob.contains(jobId)) {
jobIdToActiveJob(stage.jobId).properties
} else {
// this stage will be assigned to "default" po
基础测试题
卷面上不能出现任何的涂写文字,所有的答案要求写在答题纸上,考卷不得带走。
选择题
1、 What will happen when you attempt to compile and run the following code? (3)
public class Static {
static {
int x = 5; // 在static内有效
}
st
表里的一行对于一个数据块太大的情况有二种(一行在一个数据块里放不下)
第一种情况:
INSERT的时候,INSERT时候行的大小就超一个块的大小。Oracle把这行的数据存储在一连串的数据块里(Oracle Stores the data for the row in a chain of data blocks),这种情况称为行链接(Row Chain),一般不可避免(除非使用更大的数据
Follow up for "Remove Duplicates":What if duplicates are allowed at most twice?
For example,Given sorted array nums = [1,1,1,2,2,3],
Your function should return length