前面写了简单工厂模式跟工厂方法模式,照着以前的思路再来看抽象工厂模式觉得就没啥新意了。从工厂方法模式的角度去分析,整体可分为实体类跟工厂类两大分支。其中实体部分由一个抽象类作为基类,再加若干个子类;工厂类有一个借口加若干个工厂子类组成。现在抽象方法就是在实体类这一分支上再加上一个并列的抽象类,以及相同结构的实现该抽象类的子类。
下面以实际代码展开说明:
abstract class MountainAnimal
{
public abstract void Run();
public abstract void Jump();
}
class MountainCat : MountainAnimal
{
public override void Run()
{
Console.WriteLine("i am mountain cat i can run");
}
public override void Jump()
{
Console.WriteLine("i am mountain cat i can jump");
}
}
class MountainDog : MountainAnimal
{
public override void Run()
{
Console.WriteLine("i am mountain dog i can run");
}
public override void Jump()
{
Console.WriteLine("i am mountain dog i can jump");
}
}
abstract class GrassAnimal
{
public abstract void Run();
public abstract void Jump();
}
class GrassCat : GrassAnimal
{
public override void Run()
{
Console.WriteLine("i am grass cat i can run");
}
public override void Jump()
{
Console.WriteLine("i am grass cat i can jump");
}
}
class GrassDog : GrassAnimal
{
public override void Run()
{
Console.WriteLine("i am grass dog i can run");
}
public override void Jump()
{
Console.WriteLine("i am grass dog i can jump");
}
}
interface Factory
{
MountainAnimal CreateMountainAnimal();
GrassAnimal CreateGrassAnimal();
}
class CatFactory : Factory
{
public MountainAnimal CreateMountainAnimal()
{
return new MountainCat();
}
public GrassAnimal CreateGrassAnimal()
{
return new GrassCat();
}
}
class DogFactory : Factory
{
public MountainAnimal CreateMountainAnimal()
{
return new MountainDog();
}
public GrassAnimal CreateGrassAnimal()
{
return new GrassDog();
}
}
class Program
{
static void Main(string[] args)
{
Factory factory = new DogFactory();
MountainAnimal animal = factory.CreateMountainAnimal();
animal.Jump();
Console.ReadKey();
}
}
按照以前的思路是有一个动物类,其中有跑跟跳的方法,然后两个子类猫跟狗,去具体的实现这两个方法。现在是在原来的基础上把动物这个抽象类改成山地动物跟草原动物这两个并列的抽象类,其中的他们有共同的抽象方法。
这种方式跟工厂方法模式几乎没有区别,完全就是在一个思路上做的扩展。但是有一点就是你想再加上一个类别,比如湿地动物类,你又要再次在工厂类中修改代码,这样貌似形成一种恶性的循环,现在我还不明白怎么解决这类问题。。。。。