本文是基于 Shiro 1.4.0 的基础上进行分析。
类图如下:
通过工厂方法和模板模式将 ini Object 分为不同的Factory, 同时通过传入不同的泛型对象生成不同的类。
public abstract class IniFactorySupport<T> extends AbstractFactory<T> {
.....
protected abstract T createInstance(Ini ini);
protected abstract T createDefaultInstance();
}
public class IniSecurityManagerFactory extends IniFactorySupport<SecurityManager> {
protected SecurityManager createDefaultInstance() {
return new DefaultSecurityManager();
}
protected SecurityManager createInstance(Ini ini) {
.........
}
}
这样把不变的行为移到IniFactorySupport, 去除子类的一些冗余代码, 有助于新Factory的创建。 通过父类调用子类的实现操作, 符合“开闭原则”。