DesignPattern_AbstractFactory
摘录自:设计模式与游戏完美开发
十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合式的项目教学,即以一个游戏的范例来应用23种设计模式的实现贯穿全书,让读者学习到整个游戏开发的全过程和作者想要传承的经验,并以浅显易懂的比喻来解析难以理解的设计模式,让想深入了解此领域的读者更加容易上手。
工程GitHub
ABSTRACT FACTORY -----追MM少不了请吃饭了,麦当劳的套餐和肯德基的套餐都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“两个B套餐”就行了。麦当劳和肯德基就是B套餐的Abstract Factory, B套餐里含有汉堡, 鸡翅和饮料. 麦当劳或肯德基会根据B套餐的规格, 让汉堡Factory, 鸡翅Factory, 饮料Factory分别生产对应B套餐的材料.
抽象工厂模式:客户类和工厂类分开。消费者任何时候需要某套产品集合时,只需向抽象工厂请求即可。抽象工厂会再向具体的工厂生产出符合产品集规格的产品.
using UnityEngine;
using System.Collections;
namespace DesignPattern_AbstractFactory
{
// 可生成各抽象成品物件的操作
public abstract class AbstractFactory
{
public abstract AbstractProductA CreateProductA();
public abstract AbstractProductB CreateProductB();
}
// 实例工厂建造相应产品操作1
public class ConcreateFactory1 : AbstractFactory
{
public ConcreateFactory1() { }
public override AbstractProductA CreateProductA()
{
return new ProductA1();
}
public override AbstractProductB CreateProductB()
{
return new ProductB1();
}
}
// 实例工厂建造相应产品操作2
public class ConcreateFactory2 : AbstractFactory
{
public ConcreateFactory2() { }
public override AbstractProductA CreateProductA()
{
return new ProductA2();
}
public override AbstractProductB CreateProductB()
{
return new ProductB2();
}
}
// 抽象产品类A
public abstract class AbstractProductA
{
}
// 产品A1
public class ProductA1 : AbstractProductA
{
public ProductA1()
{
Debug.Log("生成物件類型A1");
}
}
// 产品A2
public class ProductA2 : AbstractProductA
{
public ProductA2()
{
Debug.Log("生成物件類型A2");
}
}
// 抽象产品类A
public abstract class AbstractProductB
{
}
// 产品B1
public class ProductB1 : AbstractProductB
{
public ProductB1()
{
Debug.Log("生成物件類型B1");
}
}
// 产品B2
public class ProductB2 : AbstractProductB
{
public ProductB2()
{
Debug.Log("生成物件類型B2");
}
}
}
using UnityEngine;
using System.Collections;
using DesignPattern_AbstractFactory;
public class AbstractFactoryTest : MonoBehaviour
{
void Start()
{
UnitTest();
}
void UnitTest()
{
AbstractFactory Factory = null;
// 工厂1
Factory = new ConcreateFactory1();
// 生产2个产品
Factory.CreateProductA();
Factory.CreateProductB();
// 工厂2
Factory = new ConcreateFactory2();
// 产生2个产品
Factory.CreateProductA();
Factory.CreateProductB();
}
}