近来刚接触到JAVA的Facade模式,这也是源于学习开源项目JpetStore.因为里面就有涉及这一模式.
起始对这个概念挺陌生,也查了网上的一些网友的见解,不过一般都是用class类来说明的,个人觉得
跟它原本定义有所出入.(也可能是我个人愚见),下面记录我学习这一模式后的认识.有错的地方请
大家指正.(因为我菜鸟都不算)
Facade的定义: 为子系统中的一组接口提供一个一致的界面. (都这么定义的)
Facade模式中文又叫:外观模式,门面模式.
有高手是这么形容的:
假如你是顾客,你想买很多不同厂商生产的商品,你是不是自己亲自去跟每个厂商去买?这样够累的,现实中也
许没人这么干.于是就有了商店,超市,他们去和厂商联系购买,你只要和商店,超市这种门面打交道,不用管他东西
去哪买.这样超市,商店就是我们说的外观,门面.把一切操作都交给门面,外观去做.这样你就不用到处跑了.形容
很贴切.很佩服这些牛人..!
下面举个例子吧.
假如有三个接口,每个接口有自己定义的方法:
public interface A
{
void testA();
.........
}
public interface B
{
void testB();
. .................
}
public interface C
{
void testC();
}
接着:分别定义上面三个接口的实例,实现其中方法 ,这里就不说了。直接implements就OK了。
再接着定义一个门面,里面定义上面接口中所有方法
public interface Facade
{
void testA();
void testB();
void testC();
...........
}
然后定义一个Facade的实现
public class FacadeIpm implements Facade
{
private A a; private B b; private C c;//通过spring容器注入实现A,B,C接口的实例。SET/GET方法略去。
void testA(){ a.testA() .....} //A的实现的方法
void testB(){ b.testB().......}//B的实现的方法
void testC(){ c.testC().......}//C的实现的方法
}
最后调用了;
调用就只要拿到FacadeIpm类的实现就可以分别调用A,B,C中 testA,testB,testC方法. 这样就实现了只和一个类打交道.FacadeImp实例调用testA()方法,实现的自然就是接口A中的方法。效果就达到了。
再看看这个模式的定义:Facade的定义: 为子系统中的一组接口提供一个一致的界面. 跟例子应该差不多吧。
可能有人会问,用一个类直接实现上面三个接口不就行了吗,干嘛还要多写个Facade接口.问这个就把我难住了,我想如果有很多个接口呢.这样写起来就非常不好看了.当然这种理解是很肤浅的.也是我没理解这模式的精髓所在.希望有高手告知.