[设计模式] 结构型:外观模式(Facade Pattern)

什么是外观模式

外观模式是一种非常简单的模式,即使没有了解过,对于面向对象编程的人来说,也很容易自发的写出来。

接触过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的一个外观模式应用。

基金fund1fund2对外屏蔽了多支股票的选择配置,用户购买基金以后,无需关注基金内部的股票选配,也能赚到钱(不能绝对~)

简单总结

外观模式是面向对象编程中封装思想的体现和延伸,目的就是对内封存系统的复杂性,对外展示使用的简单性。

完美契合了面向对象的编程思想~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章