import java.util.LinkedList;
/**
* 组合模式
*
* @author TMAC-J 主要用于树状结构,用于部分和整体区别无区别的场景 想象一下,假设有一批连锁的理发店,你到每个店去理发都是等同的
* 那么假设不用组合模式,你到10家店理发,你需要知道这10家店或者是知道他们的父类店
* 然后new10次来统计消费情况,但是如果用组合模式,你只需要操作根节点就可以了
*/
public class ComponentPattern {
/**
* Component抽象类,该例子中每一个店都相当于一个节点
*
*/
abstract class Market {
public abstract void add(Market m);
public abstract void remove(Market m);
public abstract void PayByCard();
}
public class MarketBranch extends Market{
LinkedList<Market> markets = new LinkedList<Market>();
@Override
public void add(Market m) {
markets.add(m);
}
@Override
public void remove(Market m) {
markets.remove(m);
}
@Override
public void PayByCard() {
for(Market market:markets){
market.PayByCard();
}
}
}
public class MarketJoin extends Market{
@Override
public void add(Market m) {
// TODO Auto-generated method stub
//子店不需要此功能
}
@Override
public void remove(Market m) {
// TODO Auto-generated method stub
//子店不需要此功能
}
@Override
public void PayByCard() {
System.out.println("payByCard");
}
}
public void test(){
Market marketBranch = new MarketBranch();
Market marketJoin = new MarketJoin();
marketBranch.add(marketBranch);
marketBranch.add(marketJoin);
marketBranch.PayByCard();
}
}