代理模式
Proxy(代理)—对象结构型模式定义:给某一个对象提供一个代理对象,并由代理对象控制原有对象的引用。
代理模式的核心思想是:创建一个代理对象,代理对象在调用目标方法时,可以插入额外的逻辑。
注意区分装饰者模式和代理模式的区别。在代理模式中,ComponentImpl 和 Proxy 类都实现了 IComponent 接口,Proxy 对象中虽然也维护着一个 ComponentImpl 对象,但一般情况下它是代理类自己初始化的,不像装饰者模式是通过 set 进去的,同时在接口方法即 operation() 中代理对象会限制外界对被代理对象的访问,而装饰者模式是装饰者给被装饰者添加额外的行为。
Spring AOP底层,就是动态代理模式的实现。
适用场景分析:
1.需要修改或屏蔽某一个或若干个类的部分功能,复用另外一部分功能。
2.需要拦截一批类中的某些方法,在方法的前后插入一些一致的操作,如Spring的AOP。
装饰者模式
Decorator(装饰)—对象结构型模式定义:动态地给一个对象添加一些额外的功能。就增加功能来说,装饰模式相比生成子类更为灵活。
ComponentImpl 和 Decorator 类都实现了 IComponent 接口,不同的是 ComponentImpl 提供了具体实现,而 Decorator 是先聚合 ComponentImpl 接着在自己的实现方法即 operation() 方法中做些处理(即装饰)后再调用 ComponentImpl 对象的具体实现。
io中inputStream在装饰模式的用法 BufferedInputStream
设计原则:
• 遵循迪米特(最少知识原则)
• 单一职责
• 开闭原则
• 破坏里氏替换原则
场景分析:
1.需要动态地给一个对象增加功能,这些功能可以动态地撤销。
2.IO流包装、数据源包装。