博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

抽象工厂模式在QQ农场游戏中的应用

Posted on 2009-12-01 22:41  都市牧羊  阅读(1399)  评论(0编辑  收藏  举报

  

意图:抽象工厂用于创建一组或一系列相关的对象并提供一个统一的接口。

优点:很容易就能扩展一组对象,只需继承抽象工厂即可。

缺点:若想增加抽象产品就要修改抽象工厂的接口了。

  

QQ农场中购买饰品的例子可以很好的理解抽象工厂模式,如图:

 

 

背景、房子、狗窝、栅栏就是抽象工厂中的抽象产品。示意代码:

下面是抽象产品:

 

代码
 1{抽象背景}
 2
 3unit uBackground; 
 4
 5interface
 6
 7type
 8  TBackground = class(TObject)
 9  public
10    procedure Buy; virtualabstract;
11  end;
12
13implementation
14
15end.

 

其它抽象产品代码略。

下面是抽象工厂,‘创建了’一组相关的抽象产品:

 

代码

 

此时若想得到蒙古包系列的背景、房子、狗窝、栅栏,先从抽象的背景、房子、狗窝、栅栏扩展出相应的蒙古包系列的产品。

 

下面是蒙古包系列的背景:

 

代码

 

蒙古包系列的其他产品代码略。

 

然后从抽象工厂继承一个用于创建蒙古包系列产品的具体工厂:

 

代码

 

至此,蒙古包系列的背景、房子、狗窝、栅栏创建完毕。风车系列的创建同蒙古包系列,代码省略。

如果还有其他系列的产品,比如糖果系列、地中海情趣系列,方法也是一样的。但是如果要增加一个与背景、房子、狗窝、栅栏同级的抽象产品就要修改抽象工厂的接口了。

 

最后,做一个简单的测试:

 

代码

  

代码

 

测试结果: