解决什么问题:
分离程序中变化与固化,增加程序的可扩展性、可控性。
程序正常需要多步完成,其中有些部分是确定的、不变的则抽离到A方法中,变化的部分由调用者具体实现实现。
业务需求:比如坐飞机出行:订票—>值机—>去机场—>取票—>登机。其中怎么去机场这部门就是变化的,不是航空部门决定的。乘客可以选择做机场大巴、出租车、代驾、机场快轨。其他都是航空部门提供的固化服务流程。
技术需求:数据库查询操作都需要获取数据源、获取Statement对象,获取ResultSet、处理集、关闭数据源。其中处理结果集部分只有具体实现者知道怎么处理。
如果不分离,程序逻辑搅在一起,重复性代码多,可控性不高,如果固化步骤增减、变化则需要修改N处,分离后只需要修改固化模块。
二者如何选择:
考虑实现变化部分是采用子类继承父类方式灵活还是回调方法方式灵活。比如数据库查询如果采用继承的方式则每个查询都要实现父类,子类的数量是不可知的,后期维护就是灾难。但是采用回调方法就不需要继承(内部类实现接口),多个查询可以在一个类中实现且互不干扰。