组合模式
组合模式将对象组合成树形结构,以表示部分-整体的层次结构。
它使得用户对组合对象的操作与对单个对象的操作具有一致性。
抽象组件接口中声明添加、删除和一些其它业务方法,节点组件实现所有方法,叶节点只需实现其它业务方法。
组合模式带来的操作一致性是透明方式的体现,叶节点和节点一样也含有添加删除方法,但没有意义。另一种方式是安全方式,即抽象组件接口中不声明添加、删除方法,让树叶和树枝实现不同的接口,但这样客户端调用时需要做判断,带来了操作不一致。
当需求中体现了部分与整体层次的结构时,或者希望用户可以忽略组合对象与单个对象的不同时,就应该考虑使用组合模式了。
很多界面控件的基类中都有Add、Remove方法,这就是典型的组合模式的应用。
享元模式
运用共享技术有效地支持大量细粒度的对象
Flyweight模式的核心是把大量共享的对象收集在一起,使用简单工厂模式进行管理,避免由于大量小对象导致系统内存过渡消耗
代理模式
代理模式和装饰模式有相同点,都可以很容易地在真实对象的方法前面或者后面加上自定义的方法:
对装饰器模式来说,装饰者(decorator)和被装饰者(decoratee)都实现同一个接口。
同样地,对代理模式来说,代理类(proxy class)和真实处理的类(real class)都实现同一个接口。
使用的场景不一样:
比如IO流使用的装饰者模式,可以层层增加功能。
代理模式可以用于增加特殊的功能。有些动态代理不支持多层嵌套。
两者的目的不同: