前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >外观模式(Facade)

外观模式(Facade)

作者头像
qubianzhong
发布2019-07-01 14:03:22
5880
发布2019-07-01 14:03:22
举报
文章被收录于专栏:行者常至行者常至

外观模式(Facade)

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。降低访问复杂系统的内部子系统时的复杂度。
类图:
这里写图片描述
这里写图片描述
在客户端和复杂系统之间再加一层,将调用顺序、依赖关系等处理好。举个例子:我们经常用的电脑,开机其实是个非常复杂的过程,而我们只需要按开机按钮就可以了。

例子:

模拟电脑启动,假设电脑启动顺序:启动CPU,启动内存,启动硬盘,加载数据等。
代码语言:javascript
复制
public class CPU {

    public void startup(){
        System.out.println("启动CPU");
    }
}
代码语言:javascript
复制
public class Memory {

    public void startup(){
        System.out.println("启动内存");
    }
}
代码语言:javascript
复制
public class Disk {

    public void startup(){
        System.out.println("启动硬盘");
    }
}
代码语言:javascript
复制
//facade
public class Computer {

    CPU cpu;
    Memory memory;
    Disk disk;

    public Computer(){
        cpu = new CPU();
        memory = new Memory();
        disk = new Disk();
    }

    public void start(){
        cpu.startup();
        memory.startup();
        disk.startup();
    }
}
代码语言:javascript
复制
public static void main(String[] args) {
        Computer computer = new Computer();
        //启动computer是个很复杂的过程,我们并不需要知道其启动各个子系统的加载过程
        //只需要调用computer为各个子系统提供统一的一个接口start()就可以启动computer了
        computer.start();
    }

总结

外观模式优点:
  • 1.减少系统相互依赖。
  • 2.提高灵活性。
  • 3.提高了安全性。
适用场景:
  • 1.为复杂的模块或子系统提供外界访问的模块。
  • 2.客户程序与抽象类的实现部分之间存在着很大的依赖性。引入facade 将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。

Test

代码语言:javascript
复制
package com.qbz.test;

class Frame {
    public void create() {
        System.out.println("组装骨架");
    }
}

class Engine {
    public void create() {
        System.out.println("组装引擎");
    }
}

class Wheel {
    public void create() {
        System.out.println("组装轮子");
    }
}

class Controller {
    private Frame frame;
    private Engine engine;
    private Wheel wheel;

    public Controller() {
        frame = new Frame();
        engine = new Engine();
        wheel = new Wheel();
    }

    public void build() {
        // 汽车组装过程
        frame.create();
        engine.create();
        wheel.create();
        System.out.println("汽车组装完成");
    }
}

public class Main {

    public static void main(String[] args) {
        Controller controller = new Controller();
        // 操作员按生产按钮开始组装汽车
        controller.build();
    }

}
输出
代码语言:javascript
复制
组装骨架
组装引擎
组装轮子
汽车组装完成
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年08月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 外观模式(Facade)
    • 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。降低访问复杂系统的内部子系统时的复杂度。
      • 类图:
        • 在客户端和复杂系统之间再加一层,将调用顺序、依赖关系等处理好。举个例子:我们经常用的电脑,开机其实是个非常复杂的过程,而我们只需要按开机按钮就可以了。
        • 例子:
          • 模拟电脑启动,假设电脑启动顺序:启动CPU,启动内存,启动硬盘,加载数据等。
          • 总结
            • 外观模式优点:
              • 适用场景:
              • Test
                • 输出
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档