美文网首页
浅谈GoF23设计模式-“AbstractFactory”模式

浅谈GoF23设计模式-“AbstractFactory”模式

作者: 浅谈码生活 | 来源:发表于2020-08-05 10:00 被阅读0次

“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();

}

每个模式都有合适的应用场景,滥用只会事倍功半。

总结:封装变化点

相关文章

网友评论

      本文标题:浅谈GoF23设计模式-“AbstractFactory”模式

      本文链接:https://www.haomeiwen.com/subject/qpknrktx.html