系统扩展的几种形式是什么?
1)直接修改代码。
2)直接修改代码,但只局限在一个类或方法中。
3)利用继承,编写子类继承以后的类,在子类里添加新的业务逻辑。
4)运行时对象装配。 将类的实例化逻辑移到运行时,通过反射,来进行装配。Spring目前做的主要就是这些事情。到这个时候才真正满足开闭原则。 Spring给我们提供了一个非常灵活扩展的基础技术架构。
5)基于模块的运行时动态扩展。 OSGi给出了解决方案,可以实现模块级别的动态扩展,而且是运行时的。所谓运行时模块的动态扩展,比如说你需要增加一些新的功能,你可以将新开发的类和文件按照Bundle进行组织,然后直接扔到运行时环境下,这些功能就可以用了。
6)基于中间语言。框架通常定义了一些Hotspot(热点),在这些点上,可以进行扩展。
哪些设计模式可以实现可扩展?
工厂模式
抽象工厂模式
观察者模式:很方便增加观察者,方便系统扩展
模板方法模式:很方便的实现不稳定的扩展点,完成功能的重用
适配器模式:可以很方便地对适配其他接口
代理模式:可以很方便在原来功能的基础上增加功能或者逻辑
责任链模式:可以很方便得增加拦截器/过滤器实现对数据的处理,比如struts2的责任链
策略模式:通过新增策略从而改变原来的执行策略