在阎宏博士的《JAVA与模式》一书中开头是这样描述门面(Facade)模式的:
门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。
门面模式有三个角色组成:
1) 门面角色( facade ):这是门面模式的核心。它被客户角色调用,因此它熟悉子系统的功能。它内部根据客户角色已有的需求预定了几种功能组合。
2) 子系统角色:实现了子系统的功能。对它而言, façade 角色就和客户角色一样是未知的,它没有任何 façade 角色的信息和链接。
3) 客户角色:调用 façade 角色来完成要得到的功能
模式作用:
将一些复杂的操作封装起来,以一个简单的接口提供给客户端.
可以定义多个子系统, 层次之间的粗细粒度需要把握好.一个子系统一个门面类
1 2 public static void main(String[] args) { 3 4 //正常调用 5 A a = new A(); 6 a.test(); 7 B b = new B(); 8 b.test(); 9 //...... 10 //上述带来的问题是调用者需要去了解所有的子系统 11 //门面模式 12 Fade fade =new Fade(); 13 fade.testA(); 14 fade.testB(); 15 fade.testC(); 16 //通过门面模式避免了客户端去了解各个子系统 17 18 } 19 20 } 21 22 class Fade { 23 24 public void testA() { 25 A a = new A(); 26 a.test(); 27 } 28 public void testB() { 29 B b = new B(); 30 b.test(); 31 } 32 public void testC() { 33 C c = new C(); 34 c.test(); 35 } 36 } 37 38 class A { 39 40 public void test() { 41 System.out.println("访问a"); 42 } 43 } 44 45 class B { 46 47 public void test() { 48 System.out.println("访问b"); 49 } 50 } 51 52 class C { 53 54 public void test() { 55 System.out.println("访问c"); 56 } 57 }
再举一个实际例子,我们去商场买衣服,吃饭,都是通过商场这个门店一步到位搞定
class ClothingCenter{ //有没有点代理模式的影子 public void sellClothing(){ beforeClothing(); System.out.println("成交衣服"); afterClothing(); } //屏蔽了一些细节 private void beforeClothing(){ System.out.println("进货衣服"); } private void afterClothing(){ System.out.println("打包衣服"); } } class EatCenter{ public void eat(){ order(); cooking(); System.out.println("吃饭"); } private void cooking(){ System.out.println("端上来"); } private void order(){ System.out.println("下单"); } } //调用 ShoppingFade shoppingFade=new ShoppingFade(); shoppingFade.buyClothing();//买衣服 shoppingFade.eatSomething();//吃饭
门面模式与中介者模式区别
1。门面模式是结构型模式,中介者模式是行为型模式。
2。门面模式是对子系统提供统一的接口,中介者模式是用一个中介对象来封装一系列同事对象的交互行为。
3。门面模式协议是单向,中介者模式协议是双向。
4。门面模式所有的请求处理都委托给子系统完成,而中介者模式则由中心协调同事类和中心本身共同完成业务。
参考地址:
http://www.cnblogs.com/java-my-life/archive/2012/05/02/2478101.html