您的位置:首页 > 移动开发 > Unity3D

Unity3D-单例模式、观察者模式和工厂模式

2017-10-30 21:33 253 查看
单例模式:

public class Singleton<T> where T : class,new()
{
private static T _instance;
public static T Instance
{
get
{
if(_instance == null)
{
_instance = new T();
}
return _instance;
}
}
}


观察者模式:

using System.Collection
abstract class Subject
{
//定义一个观察者集合用于存储所有观察者对象
protected ArrayList observers = new ArrayList();
//声明抽象注册方法,用于向观察者集合中增加一个观察者
public abstract void Attach(Observer observer);
//声明抽象注销方法,用于在观察者集合中删除一个观察者
public abstract void Detach(Observer observer);
//声明抽象通知方法
public abstract void Notify();
}

典型的具体目标类代码:
class ConcreteSubject : Subject
{
public override void Attach(Observer observer)
{
observers.Add(observer);
}

public override void Detach(Observer observer)
{
observers.Remove(observer);
}

//实现通知方法
public override void Notify()
{
//遍历观察者集合,调用每一个观察者的响应方法
foreach (object obs in observers)
{
((Observer)obs).Update();
}
}
}

典型的抽象观察者代码:
interface Observer
{
void Update();
}

典型的具体观察者代码:
class ConcreteObserver : Observer
{
//实现响应方法
public void Update()
{
//具体更新代码
}
}


工厂模式:

abstract class Product
{
//所有产品类的公共业务方法
public void MethodSame()
{
//公共方法的实现
}

//声明抽象业务方法
public abstract void MethodDiff();
}

//典型的具体产品类代码:
class ConcreteProductA : Product
{
//实现业务方法
public override void MethodDiff()
{
//业务方法的实现
}
}

//典型的具体产品类代码:
class ConcreteProductB : Product
{
//实现业务方法
public override void MethodDiff()
{
//业务方法的实现
}
}

class Factory
{
//静态工厂方法
public static Product GetProduct(string arg)
{
Product product = null;
if (arg.Equals("A"))
{
product = new ConcreteProductA();
//初始化设置product
}
else if (arg.Equals("B"))
{
product = new ConcreteProductB();
//初始化设置product
}
return product;
}
}


//典型的客户端代码:
class Program
{
static void Main(string[] args)
{
Product product;
product = Factory.GetProduct("A"); //通过工厂类创建产品对象
product.MethodSame();
product.MethodDiff();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息