组合和享元模式
2019-03-04 本文已影响0人
NazgulSun
今天两个模式都很简单,因为都是平时用的很多的模式。
第一个时组合模式,组合模式的精髓就是 对于 一个 对象或者多个对象组成的组合,对于client来说,他的行为时一致的。
组合模式用的最多的例子,就是构建树形结构,树形结构有 两种类型的节点, leaf节点 和 非 leaf节点,姑且叫Container节点。
一个container可以包含多个leaf作为其 child, 对外,我们可以按照相同的逻辑来操作 这两类节点,而不用区分时leaf还时非leaf。
在Unix中,最只直观的 例子是File 和Directory , Directory 可以包含子 File和子 Directory, 对于用户而已,可以在这两类对象上都执行相同的command,比如ls,cp等等。
在java中,大量使用组合模式的是 java.swing的UI编程,各类组件都是继承自component,不管你是button,Dialog,Panel 等都可以被统一对待。
比如对于任何一个component 都可以调用其show,hide方法,这就是 个体和组合的行为一致性。
享元模式,其实就是对象复用模式,我们看到的各类连接池都可以看成是该类模式。用户获取一个连接时,会从池子里拿一个已经创建好的,
而不是重新创建,可以避免大量的开销。
java中的string,用的就是享元模式,假设你创建10000个 “abc”,那么其实内存的常量区只有一个 abc。