对于同一个软件,可能同时需要支持在不同的窗口环境下运行,或者同一系列的程序的配置都一样的时候,我们可以采用这种抽象工厂模式,
抽象工厂模式的关键是如下图所示的左边部分,所有的具体实现部分,如不同类型的界面风格等,均被包含在一个AbstractFactory类中,客户端(Client)只与这个类打交道。其他具体的实现有这个类的成员去完成。
所以此模式分离了具体的类,使得我们可以很快的对程序进行修改,例如界面效果的更改,因为在程序中仅出现一个具体工厂类一次,只需要修改具体的工厂,就可以使用不同的产品配置。通过AbstractFactory或者ConcreteFactory(因为可能在程序中由同一个类担任这两个角色,见原书中文版的62页)提供的接口,实现不同的具体子类,但这样也存在一个问题,就是可能在需要进行特定子类的相关操作的时候,而这些操作不能通过抽象接口得到。而如果进行强制类型转换,虽然可以进行向下的类型转换,但是这样并不安全。
另外,此模式的适用性还提到:当你提供一个产品类库,而只想显示它们的接口而不是实现的时候。比较奇怪的是我们面向对象的思想就是说我们预先定义的一系列接口,在使用的时候只关心接口,并不关心实现吗?为什么在抽象工厂模式里面还要特别提出,其他的模式都不是这样的吗?
以上只是本人第一次看AbstractFactory的心得,肯定有一定的片面和误解,希望各位达人多多指点
本文地址:http://com.8s8s.com/it/it34222.htm