zoukankan      html  css  js  c++  java
  • 《JAVA与模式》之门面模式

    在阎宏博士的《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

  • 相关阅读:
    12.Scala- 注解
    11.Scala-特质
    10.Scala-继承
    9.Scala- 包和引入
    8.Scala-对象
    7.Scala-类
    6.Scala-高阶函数
    5.Scala-匹配模式
    4.Scala-数据结构
    Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 类
  • 原文地址:https://www.cnblogs.com/draem0507/p/3794946.html
Copyright © 2011-2022 走看看