好久没更新了,这个月开始更新和学习几种游戏设计模式,我根据自己的理解去解释和说明这些模式,也算是为自己做一些积累,如果出现一些理解或者是应用错误,请各位大佬一一指出!!!!!
今天要讲的呢,是简单工厂模式。一听到这个词的时候,是不是觉自己能理解它的意思,工厂嘛,就是可以生产产品的地方,我们所用的所有大多数用品都是在工厂生产的,但是我们消费者一般不直接接触工厂,而是通过中间商人获得产品,而我们自己本身看不到产品的生产过程。
以上一个例子,便是工厂模式的特性。下面,我们通过一个简单的例子用脚本来实现一下。假如现在我们要做一间房子(House),这间房子要建地基,地板,天花板,墙壁,窗户,门这些东西,作为我们设计者本人,我们肯定不会自己去动手建设,而是交由工人叔叔去建设,所以,这里我们使用简单工厂模式来实现一下。
public class House//房子类
{
private string builtTime;
public string BuiltTime { get => builtTime; set => builtTime = value; }
public House(string _builttime)
{
this.BuiltTime = _builttime;
}
public House()
{
}
public virtual void Build() { }
}
接下去是继承房子的子类
public class _Base : House {
public _Base(string _builttime):base(_builttime)
{
}
public override void Build()
{
Console.WriteLine("于"+BuiltTime+"完成了地基建造");
}
}
public class _Window : House
{
public _Window(string _builttime) : base(_builttime)
{
}
public override void Build()
{
Console.WriteLine("于" + BuiltTime + "完成了窗户建造");
}
}
public class _Door : House
{
public _Door(string _builttime) : base(_builttime)
{
}
public override void Build()
{
Console.WriteLine("于" + BuiltTime + "完成了门建造");
}
}
public class _Wall : House
{
public _Wall(string _builttime) : base(_builttime)
{
}
public override void Build()
{
Console.WriteLine("于" + BuiltTime + "完成了墙壁建造");
}
}
public class _Ceilings : House
{
public _Ceilings(string _builttime) : base(_builttime)
{
}
public override void Build()
{
Console.WriteLine("于" + BuiltTime + "完成了天花板建造");
}
}
public class _Floor : House
{
public _Floor(string _builttime) : base(_builttime)
{
}
public override void Build()
{
Console.WriteLine("于" + BuiltTime + "完成了地板建造");
}
}
然后是工厂加载类
public class BuiltFactory
{
//根据所输入需要的类型,获得需要建造的东西
public static House BuildHouse(string BuildThingsName,string timer)
{
House h = null;
switch (BuildThingsName)
{
case "天花板":
h = new _Ceilings(timer);
break;
case "地板":
h = new _Floor(timer);
break;
case "门":
h = new _Door(timer);
break;
case "地基":
h = new _Base(timer);
break;
case "窗户":
h = new _Window(timer);
break;
case "墙壁":
h = new _Wall(timer);
break;
default:
break;
}
return h;
}
}
接着可以试着调用
class Program
{
static void Main(string[] args)
{
House 地基 = BuiltFactory.BuildHouse("地基", "2018年3月1日");
地基.Build();
House 墙壁 = BuiltFactory.BuildHouse("墙壁", "2018年3月10日");
墙壁.Build();
House 地板 = BuiltFactory.BuildHouse("地板", "2018年3月25日");
地板.Build();
House 天花板 = BuiltFactory.BuildHouse("天花板", "2018年4月10日");
天花板.Build();
House 窗户 = BuiltFactory.BuildHouse("窗户", "2018年4月20日");
窗户.Build();
House 门 = BuiltFactory.BuildHouse("门", "2018年4月20日");
门.Build();
Console.ReadLine();
}
}
结果是:
完美。
其实这种方式,我觉得也能更好地让我们理解什么是面向对象开发,特别是怎样使开发更简化,更易于维护和修改,后期还会再在unity换装的文章中,使用这种模式进行加载资源与配置资源,所以可以继续关注博主,一起学习哦!!!!