结构模式之合成模式注解
来源:互联网 发布:mac 文件管理器 编辑:程序博客网 时间:2024/04/30 06:36
合成模式主要是针对树型结构进行的一种模式的界定,一般只要业务需求中含有树型结构都可以考虑用这种模式。
合成模式可以分为安全的合成模式和透明的合成模式。
安全的合成模式是指叶子节点不含有增删操作,而只有树枝节点才会有对应的增删节点的操作。
安全的合成模式的静态UML类图结构如下图所示:
下面是安全的合成模式的参考性代码:
构件Component角色代码如下:
public interface Component {
//返回自己的实例,可以考虑再加一些方法比如返回父节点的实例
CompositegetComposite();
void sampleOperation();
}
树枝节点Composite的代码如下:
public class Composite implements Component {
private Vector componentVector = new java.util.Vector();
public CompositegetComposite(){
return this;
}
public void sampleOperation(){
java.util.Enumerationenumeration = components();
while(enumeration.hasMoreElements()) {
((Component)enumeration.nextElement()).sampleOperation();
}
}
public void add(Componentcomponent){
componentVector.addElement(component);
}
public void remove(Componentcomponent){
componentVector.removeElement(component);
}
public Enumerationcomponents(){
return componentVector.elements();
}
}
叶子节点Leaf的代码如下:
public class Leaf implements Component {
//返回父节点对象
public CompositegetComposite(){
// Write your code here
return null;
}
public void sampleOperation(){
// Write your code here
}
}
透明的合成模式是将叶子当成一般的树枝节点看待,然后将树枝节点中所拥有的如增加删除这样的操作提升到抽象层,从而使树枝和叶子节点统一。
下面为透明式合成模式的UML类图结构:
下面给出透明式合成模式的参考实现代码:
抽象构件的代码如下:
public interface Component
{
void sampleOperation();
CompositegetComposite();
void add(Componentcomponent);
void remove(Componentcomponent);
Enumerationcomponents();
}
树枝节点代码如下:
public class Composite implements Component
{
private Vector componentVector = new java.util.Vector();
public CompositegetComposite()
{
return this;
}
public void sampleOperation()
{
java.util.Enumerationenumeration = components();
while(enumeration.hasMoreElements())
{
((Component)enumeration.nextElement()).sampleOperation();
}
}
public void add(Componentcomponent)
{
componentVector.addElement(component);
}
public void remove(Componentcomponent)
{
componentVector.removeElement(component);
}
public Enumerationcomponents()
{
return componentVector.elements();
}
}
叶子节点的代码如下:
public class Leaf implements Component
{
private Vector componentVector = new java.util.Vector();
public void sampleOperation()
{
// Write your code here
}
public void add(Componentcomponent)
{
componentVector.addElement(component);
}
public void remove(Componentcomponent)
{
componentVector.removeElement(component);
}
public CompositegetComposite()
{
// Write your code here
return null;
}
public Enumerationcomponents()
{
// Write your code here
return null;
}
}
在实际使用中,是可以对节点指定父节点的,这样就可以向上追述关系了。当然也仍然是可以在树枝节点中指定其包含的叶子节点以及所拥有的树枝节点。
- 结构模式之合成模式注解
- java 设计模式-结构模式之合成模式
- 结构模式之适配器模式注解
- 结构模式之代理模式注解
- 结构模式之门面模式注解
- 结构模式之装饰模式注解
- 结构模式之享元模式注解
- 结构模式之桥梁模式注解
- 设计模式之:合成模式
- 设计模式之合成模式
- 设计模式之合成模式
- 我学设计模式 之 合成模式
- 合成模式(Composite) -- (模式之六)
- 【设计模式】之 Composite 合成模式
- Java设计模式笔记之合成模式
- 设计模式之组合(合成)模式
- 《JAVA与模式》之合成模式
- 《JAVA与模式》之合成模式
- rootfs文件系统的简单分析
- 成功的关键是看清大趋势,现在大趋势、大潮流是什么
- DWR页面代码
- 关于“地址”的问题
- American Heritage美国血统
- 结构模式之合成模式注解
- DWR配置文件代码
- 3个offer(完美,京东,) 大家来看看怎么抉择~~ 急求大家给个意见啊 要做抉择了
- 2011-10-18
- DWR在web.xml中配置的文件
- Linux内核源代码简单分析(如何深入研究源代码)(转)
- 中国近日研制成功世界第一台永磁悬浮旋转机械
- DWR使用的类
- PL/SQL视频笔记