一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情。
组合模式
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。
作用:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
比如部门树结构,
public class Dept {
private String name;
private String parentId;
private List<Dept> children;
}
element中的Cascader
级联选择结构
const options = [
{
value: 'guide',
label: 'Guide',
children: [
{
value: 'disciplines',
label: 'Disciplines',
children: [
{
value: 'consistency',
label: 'Consistency',
},
{
value: 'feedback',
label: 'Feedback',
},
{
value: 'efficiency',
label: 'Efficiency',
},
{
value: 'controllability',
label: 'Controllability',
},
],
},
]
}
装饰器模式
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
作用:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。
通常装饰类包含原类的一个对象,相当于一个wrapper类,是对原类功能的扩展
jdk中的流InputStream是一个典型的装饰器模式,其子类有
-
ByteArrayInputStream
-
FileInputStream
-
PipedInputStream
-
SequenceInputStream
-
FilterInputStream
public class FilterInputStream extends InputStream { // 包含了一个原类对象 protected volatile InputStream in; }
Spring Wrapper
BeanWrapper
是一个包装类接口,其实现类BeanWrapperImpl
接收一个Object对象进行包装处理。public BeanWrapperImpl(Object object) { super(object); } /** * Create a new BeanWrapperImpl, wrapping a new instance of the specified class. * @param clazz class to instantiate and wrap */ public BeanWrapperImpl(Class<?> clazz) { super(clazz); }
装饰模式就像穿衣服,一层层的进行包装、扩展。
\