在的类包含几个甚至更多类似的函数时,这样的if-else代 码就会变得比较不那么容易维护了。此时,应用本模式,可以将这种复杂情形隔离开,即将这类不确定的对象的实例化过程延迟到子类。
实现:该模式的典型实现方法就是将调用类定义为一个虚类,在调用类定义一个专门用于构造不确定的对象实例的虚函数,再将实际的对象实例化代码 留到调用类的子类来实现。如果,被构造的对象比较复杂的话,同时可以将这个对象定义为可以继承、甚至虚类,再在不同的调用类的子类中按需返回被构造类的子 类。
重构成本:低。该模式的重构成本实际上还与调用类自己的实例化方式相关。如果调用类是通过Factory方 式(此处“Factory方式”泛指对象的实例化通过Factory Method或Abstract Factory这样的相对独立出来的 方式构造)构造的,那么,重构成本相对就会更低。否则,重构时可能除了增加调用类的子类,还要将所有实例化调用类的地方,修改为以新增的子类代替。可能这 样的子类还不止一个,那就可以考虑迭代应用模式来改善调用类的实例化代码。
1.2AbstractFactory
思想:不直接通过对象的具体实现类,而是通过使用专门的类来负责一组相关联的对象的创建。
场景:最典型的应用场景是:您只想暴露对象的接口而不想暴露具体的实现类,但是又想提供实例化对象的接口给用户;或者,您希望所有的对象能够 集中在一个或一组类(通常称作工厂类)来创建,从而可以更方便的对对象的实例化过程进行动态配置(此时只需要修改工厂类的代码或配置)。
实现:该模式的实现是比较清晰简单的,如上图,就是定义创建和返回各种类对象实例的工厂类。在最复杂而灵活的情形,无论工厂类本身还是被创建 的对象类都可能需要有一个继承体系。简单情形其实可以只是一个工厂类和需要被创建的对象类。不一定非要像上图中结