随着科技的不断发展,各种各样的新兴事物都出现在了我们的生活中。当然了,各种机械仿真动物也随之出现了,开始我们只有Animal,现在我们有仿真Animal了,那么仿真动物该怎么叫呢(仿真喵:喵喵喵,仿真狗:汪汪汪。真喵:喵~~~~~~,真dog:汪~汪~汪~)。现在我们抽象仿真动物,并创建仿真动物类:
/// <summary> /// 仿真动物 /// </summary> public class SimulationAnimal { public virtual void SimulationCall() { Console.WriteLine("仿真动物叫"); } } /// <summary> /// 仿真Dog /// </summary> public class SimulationDog : SimulationAnimal { public override void SimulationCall() { Console.WriteLine("汪汪汪"); } } /// <summary> /// 仿真Cat /// </summary> public class SimulationCat : SimulationAnimal { public override void SimulationCall() { Console.WriteLine("喵喵喵"); } }
好了,仿真动物类我们已经创建好了,那么该怎么去生成仿真动物的实例呢?在工厂方法模式中,我们抽象了动物工厂(接口也行),实现具体工厂以生成具体动物的实例。现在是创建一个抽象仿真动物工厂,在实现具体的仿真动物工厂呢还没其他处理呢。如果这么做,当出现第二代仿真动物,第三代仿真动物后,我们继续创建抽象工厂吗,这样好像和不使用简单工厂前有点类似了。并且在执行主程序中需要创建不同的工厂,所以不能这样做。
抽象工厂模式就来了:在工厂方法模式中我们创建了Dog工厂,只有一个方法返回了Dog实例,仿真Dog也是Dog没错吧,所以我们依旧让Dog工厂来产生我们的仿真Dog实例(大话设计模式中的例子:数据库:SQL,Oracle,数据模型:User,Department, 具体工厂:User工厂,Department工厂)。代码示例:
/// <summary> /// 抽象工厂 /// </summary> public abstract class AbstractFactory { //抽象方法 public abstract Animal GetAnimal(); public abstract SimulationAnimal GetSimulationAnimal(); } /// <summary> /// 狗工厂 /// </summary> public class DogFactory : AbstractFactory { public override Animal GetAnimal() { return new Dog(); } public override SimulationAnimal GetSimulationAnimal() { return new SimulationDog(); } } /// <summary> /// 猫工厂 /// </summary> public class CatFactory : AbstractFactory { public override Animal GetAnimal() { return new Cat(); } public override SimulationAnimal GetSimulationAnimal() { return new SimulationCat(); } }
在主程序中,我们就可以根据需要产生实例了。
PS:当然,又是废话一大堆,莫得事,加油干。
来源:https://www.cnblogs.com/rp-blogs/p/10255533.html