java设计模式之组合模式
这标题格式是不是要该一下啊,我去,要是个字符才可以。。。
通用代码,我是引用了”设计模式之禅“,这也是自己对这本书的内容的总结。谢谢阅读。
组合模式的定义如下:
将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性
再本人看来,组合模式就是把类A和类B的共同部分抽象出来形成接口。对于树形结构(如二叉树形式的)很合适。恩,就是这么简单的模式,说不定自己就在用了。
通用代码:
//抽象部分
public abstract class Componet
{
//添加抽象的功能。
public void doSomething(){}
}
//树枝构件,此处就是右子树
public class Composite extends Component
{
private ArriayList<Component> componentArrayList=new ArrayList<Component>();
public void add(Component componet)
{
this.componentArrayList.add(componet);
}
public void remove(Component component)
{
this.componentArrayList.remove(component);
}
public ArrayList<Component> getChidren()
{
return this.componentArrayList;
}
}
//树叶结构,可以看做是左子树。一般左子树是抽象后的最小的单位。
public class Leaf extends Component
{
//覆写父类的方法,添加自己的代码
public void doSomething(){}
}
组合模式的优点
- 一颗树形机构的所有节点都是Component,局部和整体对调用者就是说没有任何区别。
2.节点可以自由增加,这很容易看出来,只要确定了左右节点的位置,就可以按部就班的继承就可以了。
组合模式的缺点:
1.与依赖倒置原则冲突,可以想象的出,如果要用Leaf类必须在主类里初始化,这就是高层对底层的依赖。高层和底层应该都依赖他们的接口,这才是面向对象编程。不过对于真正的组合模式,这不是问题。因为我们一般是使用关系型数据库实现数据的输入。
组合模式的使用场景:
1.维护和展示部分关系的场景:如文件和文件夹管理。
2.树形结构的一定要用了。
共同学习,写下你的评论
评论加载中...
作者其他优质文章