`

外观模式

 
阅读更多

 

 比如在玩“极品飞车”这款游戏,你只需要等待的就是倒计时到0时以最快的车速冲到第一名,但游戏者根本没有想过在车冲出去之前要做哪些工作,比如挂档,离合器,油箱检测,调整方向等等的微操作,将这些微操作封装起来变成一个接口就是外观模式了。在WEB开发中的MVC分层架构就是典型的一个外观模式,每一层将操作的具体内容隐藏起来,保留一个接口供上层调用。

    【外观模式解释

    类型:结构模式

    为子系统中的一组接口提供一个一致的interface接口界面。

    【外观模式UML图

    【外观模式-JAVA代码实现

    新建赛车类:

 

package car_package;

public class car {

    
public void start() {
        System.out.println(
"车子已启动");
    }

    
public void check_stop() {
        System.out.println(
"刹车检查");
    }

    
public void check_box() {
        System.out.println(
"检查油箱");
    }

    
public void check_console() {
        System.out.println(
"检查仪表盘是否异常");
    }

}

 新建赛车操作的外观类:

 

package car_facade;

import car_package.car;

public class car_facade_imple {

    
public void car_go_go(car car_ref) {
        car_ref.check_box();
        car_ref.check_console();
        car_ref.check_stop();
        car_ref.start();
    }
}

 

    新建客户端运行类:

 

package run_main;

import car_facade.car_facade_imple;
import car_package.car;

public class run_main {

    
public static void main(String[] args) {
        car_facade_imple car_facade_imple_ref 
= new car_facade_imple();
        car_facade_imple_ref.car_go_go(
new car());
    }
}

 

    程序运行结果如下:

 

检查油箱
检查仪表盘是否异常
刹车检查
车子已启动

 

    很简单吧,将子操作用一个外观接口封装起来,然后调用这个接口就是调用那些非常复杂的微操作了

 

 

我们把一个文件,放在了第二抽屉里,而第二个抽屉的钥匙放在了第一个抽屉里,我们要想取出这个文件,第一步肯定要拿到第一个抽屉的钥匙,然后打开它再拿出第二个抽屉的钥匙,最后打开第二个抽屉取出文件。(两个抽屉还好说,但如果是n个呢?)所以对于客户来说,这些取钥匙的过程不需要知道,他们只需要按一个按钮,然后文件就自动取出来。代码例子如下:

public class DrawerOne {
public void open() {
   System.out.println("第一个抽屉被打开了");
   getKey();
}

public void getKey() {
   System.out.println("得到第二个抽屉的钥匙");
}
}

public class DrawerTwo {
public void open() {
   System.out.println("第二个抽屉被打开了");
   getFile();
}

public void getFile() {
   System.out.println("得到这个重要文件");
}
}

//这就是外观类,对客户隐藏了所有具体细节
//client类只需要调用一个open()就完成所有操作
public class DrawerFacade {
DrawerOne darwerOne = new DrawerOne();
DrawerTwo darwerTwo = new DrawerTwo();

public void open() {
   darwerOne.open();
   darwerTwo.open();
}
}

public class Client {
public static void main(String[] args) {
   DrawerFacade drawer = new DrawerFacade();
   drawer.open();
}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics