“AbstractFactory”Pattern简介:围绕一个超级工厂创建其他工厂,抽象出一个系列(场景),去封装其他变化点。
“AbstractFactory”Pattern要点:
1.)如果没有应对“多系列对象构建”的需求变化,则没有必要使用“AbstractFactory”Pattern,这时候用简单的静态工厂完全可以。
2.)“系列对象”指的是这些对象之间有相互依赖,或作用的关系,例如游戏开发场景中的“道路”与“房屋”的依赖,“道路”与“地道”的依赖。
3.)“AbstractFactory”Pattern模式主要在于应对“新系列”的需求变动。其缺点在于难以应对“新对象”的需求变动。
通俗讲,其实当我们的业务需求的变化点在系列和场景时,我们可以使用该模式,当变化点在对象时就没有必要将该模式应用在此处。

如何定义我们的抽象工厂和客户程序:
//抽象
public abstract class Road { }
public abstract class Building { }
public abstract class Tunnel { }
public abstract class Jungle { }
public abstract class FacilitFactory
{
public abstract Road CreateRoad();
public abstract Building CreateBuilding();
public abstract Tunnel CreateTunnel();
public abstract Jungle CreateJungle();
}
//继承
public class ModernRoad : Road { }
public class ModernBuilding: Building { }
public class ModernTunnel : Tunnel { }
public class ModernJungle : Jungle { }
public class ModernFacilitFactory : FacilitFactory
{
public override Building CreateBuilding(){return new ModernBuilding();}
public override Jungle CreateJungle(){return new ModernJungle();}
public override Road CreateRoad(){return new ModernRoad();}
public override Tunnel CreateTunnel(){return new ModernTunnel();}
//客户程序
class Gamemanager
{
FacilitFactory facilitFactory;
public Gamemanager(FacilitFactory facilitFactory)
{
this.facilitFactory = facilitFactory;
}
Road road; Building building; Tunnel tunnel; Jungle jungle;
public void BuildGameFacilit()
{
road = facilitFactory.CreateRoad();
building = facilitFactory.CreateBuilding();
tunnel = facilitFactory.CreateTunnel();
jungle = facilitFactory.CreateJungle();
}
public void Run(){}
}
//调用
public static void Main()
{
Gamemanager game = new Gamemanager(new ModernFacilitFactory());
game.BuildGameFacilit();
game.Run();
}
每个模式都有合适的应用场景,滥用只会事倍功半。
总结:封装变化点
网友评论