WEB开发网
开发学院软件开发Python Python设计模式系列之四: 创建型Abstract Factory... 阅读

Python设计模式系列之四: 创建型Abstract Factory模式

 2007-03-30 12:56:31 来源:WEB开发网   
核心提示: 当软件系统要由多个产品族中的一个来进行配置的时候,此时系统中会存在多于一个的产品族,Python设计模式系列之四: 创建型Abstract Factory模式(3),但同一时刻只会消费其中某一族的产品,这是抽象工厂模式的原始用意,游戏在设计时依据难度级别形成了两个产品族,玩家在游戏期间肯定

当软件系统要由多个产品族中的一个来进行配置的时候,此时系统中会存在多于一个的产品族,但同一时刻只会消费其中某一族的产品,这是抽象工厂模式的原始用意。

当一簇相关产品被设计成应该被组合使用的时候,即同属于某个产品族的多个产品是需要在一起配套使用的,这一约束必须在系统设计时体现出来。

当需要提供一个产品库,并且只想暴露接口而不是实现的时候,这样所有的产品都能够以同样的接口出现,从而使得客户端可以不依赖于具体的实现。

二、模式引入

抽象工厂模式的一个主要功能是它能够隔离要生成的具体产品类,由于这些类的实际类名都被隐藏在工厂里面,因此客户端根本不需要关心如何对它们进行实例化的细节。每一种设计模式都是针对特定问题的解决方案,而抽象工厂模式面临的问题则是当涉及到有多个产品等级结构时,如何更好地进行软件体系结构的设计。下面从一个具体的问题出发,将抽象工厂模式引入到软件系统的设计中来。

假设我们打算开发一个类似于Doom或者Quake那样的格斗类游戏,为了适应不同等级玩家的需要,游戏特地安排了两个难度级别:初等级别和高难级别。在初等级别中,敌方士兵反映迟钝,怪兽步履缓慢,即便是初学者也能够很轻松地取胜;但在高难级别中,敌方士兵反映敏捷,怪兽狰狞狡诈,就算是高级玩家也难逃被击毙的厄运。

在具体实现时可以先设计两个抽象产品类Soldier和Monster,用来代表士兵和怪兽,然后再分别从它们派生出SillySoldier和SillyMonster两个具体产品类用于初等级别,以及WiseSoldier和WiseMonster两个具体产品类用于高难级别。设计时一个值得注意的问题是,游戏在运行的过程中SillySoldier和WiseMonster是绝对不能同时出现的,因为玩家要么就与SillySoldier和SillyMonster进行实战演练,要么就与WiseSoldier和WiseMonster展开艰苦的战斗。不难看出,游戏在设计时依据难度级别形成了两个产品族,玩家在游戏期间肯定会使用这两个产品族中的某一族对象,但绝对不会同时使用它们。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Python 设计模式 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接