首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

抽象工场模式的实践

2013-01-20 
抽象工厂模式的实践抽象工厂模式,简单地说,由几个类构成:一个工厂类,一个或多个抽象类作为基类,多个具体类

抽象工厂模式的实践

抽象工厂模式,简单地说,由几个类构成:一个工厂类,一个或多个抽象类作为基类,多个具体类作为子类,还有一个接口。工厂类有一个工厂方法,它接收一个参数,例如要创建对象的信息;返回一个实现了那个接口的对象。该对象的运行时类型则是上述子类中的一个。这些子类中的每一个都继承于那些基类中的一个,那些基类再分别向上继承到一个共同的基类,它是继承关系的根。根类会实现那个接口。

模板方法

以Cat和Dog两个类为例,它们可以继承于Pet类,并实现接口IMyPet,然后,工厂类PetFactory的CreatePet方法能这样工作:CreatePet("Kittie") 返回一个新创建的Cat对象,而CreatePet("Woofy") 返回一个Dog对象。它可以是根据数据库里有Kittie和Woofy的记录而去创建这些不同种类的对象的。

现在,我想让这个创建出来的宠物去喝牛奶。不过,为了考验它们,在它们的必经之路上有一个游泳池。猫不会游泳,我特意为它准备了一个竹筏(嗯,我相信她能自己学会怎样使用它)。然后,我分别调用每个宠物的GoToDrinkMilk()方法。该方法类似下面这样:

列名类型注释PetIdGUID宠物的IDPetNamevarchar宠物的名字PetTypevarchar宠物的类型码,如CAT、DOG等......有关宠物的其他信息

对于这个表,如果有两条记录,其中一条的PetName是Kittie,PetType是CAT;另一条的PetName是Woofy,PetType是DOG,那么当调用CreatePet("Kittie")时,它会去查询PetName为Kittie的那条记录,然后检查PetType值,发现是CAT后,就创建一个Cat类的对象,并用数据库中的数据去初始化它。基本的工作方式就是这样。

需要注意的是,由于潜在地有些方法需要被“下推”到基类中,基类最好能包含绝大多数它可能用到的数据成员,包括那些在只有在特定的子类中才有的行为。因为这些行为可能被多个子类共享而需要被“下推”到基类中,所以这些行为中要用到的数据成员最好也放在基类中作为受保护(protected)成员来处理。这样会让程序修改的代价更低一些。

总结

本文讲述了编程实践中对抽象工厂设计模式的一些常见用法,包括基类与子类、接口、工厂方法及注意事项等。有了这些了解之后,您在将来的实践中或许能更容易地对这种场合进行编程。欢迎在r_mosaic的CSDN博客上提出您的意见和想法。


热点排行