合成模式

合成(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();
}

}


使用这个模式可以轻易的合成子节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值