外观模式主要是对外提供了一个统一的接口,隐藏内部的复杂操作逻辑。个人理解外观模式与命令模式的区别主要是:
1.命令模式的每一个具体的命令(ConcreteCommand)有着共同的父类或者实现了同一个接口(Command),外观模式中的各对象(如本例中的股票、国债、房地产)不一定有共同的父类或接口
2.如前面命令模式与策略模式的区别一样,命令模式有接收者,外观模式没有。
UML
代码结构
public class Client {
public static void main(String[] args) {
Fund fund = new Fund();
//基金购买
fund.buyFund();
System.out.println("------------------");
//基金赎回
fund.sellFund();
}
}
public class Fund {
private Stock stock;
private NationalDebt nationalDebt;
private Realty realty;
public Fund() {
stock = new Stock();
nationalDebt = new NationalDebt();
realty = new Realty();
}
public void buyFund() {
stock.buy();
nationalDebt.buy();
realty.buy();
}
public void sellFund() {
stock.sell();
nationalDebt.sell();
realty.sell();
}
}
public class NationalDebt {
public void sell() {
System.out.println("国债卖出");
}
public void buy() {
System.out.println("国债买入");
}
}
public class Realty {
public void sell() {
System.out.println("房地产卖出");
}
public void buy() {
System.out.println("房地产买入");
}
}
public class Stock {
public void sell() {
System.out.println("股票卖出");
}
public void buy() {
System.out.println("股票买入");
}
}
运行结果