什么是外观模式
外观模式是一种非常简单的模式,即使没有了解过,对于面向对象编程的人来说,也很容易自发的写出来。
接触过web
编程的人应该都知道MVC
架构模式,从设计模式的角度看,其中的控制器C
就可以看作是外观模式的体现。
来自客户端的请求无需知道控制器背后的实现逻辑,只需要知道控制器能做什么事情就可以了。
通常,控制器能够完成某项任务,但是自身并不具备实际的业务处理能力,而是根据请求数据,与其它组件或系统进行简单或复杂的交互,这些过程对于客户端来讲,是透明无感知的。
外观模式就是要屏蔽系统内部的复杂性,提供简单规范的接口,供外界使用,简化系统与外界的交互复杂度。
设计与实现
我觉的,可以这么讲,所有在浏览器中可以打开的web
页面都是外观模式的体现。
通过web
页面,我们可以很方便的完成自己的事情,但是web
页面背后具体是怎么实现的,对于使用者来说,没有多少人会去关心背后提供服务的系统吧?
就拿股票和股票型基金来举个例子。
想赚钱的用户,可以自己去研究购买股票,这样比较费事儿,因为股票很多,要研究的也很多。
于是,就有人提出了股票型基金的概念,股票型基金就是专门购买股票的基金,为了防范风险,通常会包含很多支股票。
对于研究股票配置嫌麻烦的用户,就可以选择购买股票基金,将多支股票的选配交给基金去管理,自己只需要买入或者卖出一支基金就好。
用代码实现的话,大概就是这样的:
// 购买多支股票
public class StockMarket {
public void stock1() {
System.out.println("股票1");
}
public void stock2() {
System.out.println("股票2");
}
public void stock3() {
System.out.println("股票3");
}
public void stock4() {
System.out.println("股票4");
}
public void stock5() {
System.out.println("股票5");
}
}
// 提供两支股票型基金
public class FundMarket {
private StockMarket stockMarket = new StockMarket();
// 股票型基金1购买股票1/3/5
public void fund1() {
stockMarket.stock1();
stockMarket.stock3();
stockMarket.stock5();
}
// 股票型基金2购买股票2/4
public void fund2() {
stockMarket.stock2();
stockMarket.stock4();
}
}
基金市场类FundMarket
就相当于是股票市场类StockMarket
的一个外观模式应用。
基金fund1
和fund2
对外屏蔽了多支股票的选择配置,用户购买基金以后,无需关注基金内部的股票选配,也能赚到钱(不能绝对~)
简单总结
外观模式是面向对象编程中封装思想的体现和延伸,目的就是对内封存系统的复杂性,对外展示使用的简单性。
完美契合了面向对象的编程思想~~