合成(Composite)模式有时又叫做部分-整体(Part-Whole)模式。
合成模式将叶子对象合成到树的结构中,可以用来描述整体与部分的关系。
这样可以任意的添加叶子节点。
1、模式涉及到的三个角色
1)抽象构件(Component):这是一个抽象(也可以使抽象类)角色,它给所有参加合成的对象规定抽象方法
2)叶子构件(Leaf):参加合成的树叶对象。一个树叶没有下级的子对象。定义出参加具体方法的实现。
3)树枝构件(Composite)角色:管理所有叶子的实现类。他本来也是抽象结构的子类。
合成模式可以看成一棵树,抽象构件就是主干,树枝构件就是树枝,他对叶子进行管理。
具体实现
1、抽象构件
2、树枝构件
3、叶子节点
具体调用
使用这个模式可以轻易的合成子节点。
合成模式将叶子对象合成到树的结构中,可以用来描述整体与部分的关系。
这样可以任意的添加叶子节点。
1、模式涉及到的三个角色
1)抽象构件(Component):这是一个抽象(也可以使抽象类)角色,它给所有参加合成的对象规定抽象方法
2)叶子构件(Leaf):参加合成的树叶对象。一个树叶没有下级的子对象。定义出参加具体方法的实现。
3)树枝构件(Composite)角色:管理所有叶子的实现类。他本来也是抽象结构的子类。
合成模式可以看成一棵树,抽象构件就是主干,树枝构件就是树枝,他对叶子进行管理。
具体实现
1、抽象构件
public abstract class Moive {
protected abstract void play();
}
2、树枝构件
import java.util.ArrayList;
import java.util.List;
public class MoviePlayer extends Moive {
private final List<Moive> moives = new ArrayList<Moive>();
@Override
protected void play() {
for (Moive moive : moives) {
moive.play();
}
}
public void addMoive(Moive moive) {
moives.add(moive);
}
public void removeMoive(Moive moive) {
moives.remove(moive);
}
}
3、叶子节点
public class ActionMovie extends Moive {
@Override
protected void play() {
System.out.println("show action movie");
}
}
public class HorrorMovie extends Moive {
@Override
protected void play() {
System.out.println("show horror movie");
}
}
public class LoveMovie extends Moive {
@Override
protected void play() {
System.out.println("show love movie");
}
}
具体调用
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
MoviePlayer player = new MoviePlayer();
player.addMoive(new ActionMovie());
player.addMoive(new LoveMovie());
HorrorMovie horrorMovie = new HorrorMovie();
player.addMoive(horrorMovie);
player.play();
System.out.println("The horror movie is too scary.");
player.removeMoive(horrorMovie);
player.play();
}
}
使用这个模式可以轻易的合成子节点。