合成模式

合成(Composite)模式有时又叫做部分-整体(Part-Whole)模式。
合成模式将叶子对象合成到树的结构中,可以用来描述整体与部分的关系。
这样可以任意的添加叶子节点。
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();
	}

}


使用这个模式可以轻易的合成子节点。

你可能感兴趣的:(设计模式)