一个工厂用于创建对象,如果对象在指定范围内存在(singleton,thread,request,session),则不创建新对象,而是使用之前创建的对象。
UML类图如下:
每个实现类中都有一样创建对象的过程,因此将生成对象方法抽成父类:
父类ObjectFactoryImpl实现了对象创建的过程,在创建对象之前(create方法中)首先调用抽像方法getObjectFromCache()来判断是否已存在该对象,如果已存在就直接返回,不存在就创建对象并调用putObjectToCache 方法存入缓存,已使下次使用时能直接获取。
从上图看出,每一个实现类都负责了二个功能:
1.对象的创建
2.缓存对象
与类的单一职责原则违背,且这两个职责没有紧密到分不开的程度,且实现类不应该算做接口ObjectFactory的一个子类,因为实现类的职责更加关注于Cache 而不是Create。
因此将继承关系改成关联关系: