外观模式:为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这个子系统更加容易使用
个人理解:高层次的封装,客户端要实现某一功能,只需要调用一个高层次的接口而不必关心里面调了哪些接口,可以实现客户端与子系统内部接口的解耦。此外高层次的封装将不影响低层次的直接调用。
如果还是不能理解,那么想想股票与基金的区别(这里假设该基金恰好只持有这三支股票):
买股票:每个人买多只股票,直接操作每只股票的买入卖出,需要时刻注意每只股票的涨跌,耦合较大,操作较为繁琐
买基金:每个人只需要买一只基金,由基金公司负责股票的买入卖出,而人只需要关注这只基金的涨跌,对基金的操作间接完成了对所有股票的操作。耦合较低,操作简洁。此外买基金对买股票不造成影响,若有人只是想买一只股票,仍可直接购买某一具体股票
下面为代码实现(为了简洁易懂,这里只出现了实现类):
1.阿里股票
public class AliStock{
public void byAliStock(){
System.out.println("买入阿里股票");
}
public void saleAliStock(){
System.out.println("卖出阿里股票");
}
}
2.腾讯股票
public class TencentStock {
public void byTencentStock(){
System.out.println("买入腾讯股票");
}
public void saleTencentStock(){
System.out.println("卖出腾讯股票");
}
}
3.百度股票
public class BaiduStock {
public void byBaiduStock(){
System.out.println("买入百度股票");
}
public void saleBaiduStock(){
System.out.println("卖出百度股票");
}
}
4.基金
public class Fund {
private AliStock ali=new AliStock();
private TencentStock tencent=new TencentStock();
private BaiduStock baidu=new BaiduStock();
public void buyFund(){
ali.byAliStock();
tencent.byTencentStock();
baidu.byBaiduStock();
}
public void saleFund(){
ali.saleAliStock();
tencent.saleTencentStock();
baidu.saleBaiduStock();
}
}
5.人(测试类)
public class People {
public static void main(){
//买股票
AliStock ali=new AliStock();
TencentStock tencent=new TencentStock();
BaiduStock baidu=new BaiduStock();
ali.byAliStock();;
tencent.byTencentStock();
baidu.byBaiduStock();
//卖股票
ali.saleAliStock();
tencent.saleTencentStock();
baidu.saleBaiduStock();
//买基金(间接买股票)
Fund fund=new Fund();
fund.buyFund();
//卖基金(间接卖股票)
fund.saleFund();
}
}
外观模式在规模较大的系统或网站中是很常见的,很适合提供高层次的业务服务,在具体的外观设计中尽量不掺杂额外功能,不返回低层次的组件服务给客户端