Facade模式翻译成零售商模式我想更加容易理解。当你想要买一块香皂的的时候,你肯定不会去香皂厂买,而是去超市买,同样,买衣服买手机都不会去厂家,而是去零售商家。我想用代码来解释会更加容易:
首先是不用门面模式来买这些东西:
上面的代码里面,我们必须直接和生产者打交道,这样会很麻烦,我们需要一个统一的接口,可以得到所有这些东西,那么就用到了facade模式,下面就是用fadace模式实现的代码:
在这里,我们想要得到各种商品,只需要和Store这个类打交道就行了,不需要直接和厂家联系,降低了客户端代码和生产者之间的耦合,当生产者发生变化的时候,只需要更改Store这个类,而不必改客户端。举一个大家可能会经常用到的例子吧,数据库连接,现在数据库厂商非常多,比如oracle,sqlserver,mysql等等,当我们想要一个数据库连接对象的时候,需要进行一系列操作,客户端希望告诉一个类用户名,密码,url和数据库厂商,就直接返回一个数据库连接对象,那么就可以使用fadace模式,这个模式中的Store的形式如下:
这样做的好处就是隐藏了数据库连接操作的细节,用户只关心自己的业务逻辑就行了,数据库连接这些与业务逻辑无关的操作就让其它类来做就行了。