外观模式(Facade)

转载 2016年08月30日 13:40:59

外观模式(Facade)

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。降低访问复杂系统的内部子系统时的复杂度。

类图:

这里写图片描述

在客户端和复杂系统之间再加一层,将调用顺序、依赖关系等处理好。举个例子:我们经常用的电脑,开机其实是个非常复杂的过程,而我们只需要按开机按钮就可以了。

例子:

模拟电脑启动,假设电脑启动顺序:启动CPU,启动内存,启动硬盘,加载数据等。

public class CPU {

    public void startup(){
        System.out.println("启动CPU");
    }
}
public class Memory {

    public void startup(){
        System.out.println("启动内存");
    }
}
public class Disk {

    public void startup(){
        System.out.println("启动硬盘");
    }
}
//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();
    }
}
public static void main(String[] args) {
        Computer computer = new Computer();
        //启动computer是个很复杂的过程,我们并不需要知道其启动各个子系统的加载过程
        //只需要调用computer为各个子系统提供统一的一个接口start()就可以启动computer了
        computer.start();
    }

总结

外观模式优点:

  • 1.减少系统相互依赖。

  • 2.提高灵活性。

  • 3.提高了安全性。

适用场景:

  • 1.为复杂的模块或子系统提供外界访问的模块。

  • 2.客户程序与抽象类的实现部分之间存在着很大的依赖性。引入facade 将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。

Test

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();
    }

}

输出

组装骨架
组装引擎
组装轮子
汽车组装完成

结合laravel Facade看外观模式怎么用?

在laravel中,我们经常通过facade来实现全局调用某个方法而不需要实例化一个对象,今天就来扒一扒它是怎样做到的。所有的Facade都是继承自同一个抽象父类Illuminate\Support\...
  • Many7Hong7
  • Many7Hong7
  • 2016年10月02日 21:00
  • 1893

JAVA设计模式十九--Facade(外观模式)

Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。 Facade模式概述         实际应用中,我们在对付一些老旧...
  • hfmbook
  • hfmbook
  • 2012年06月29日 15:25
  • 18487

iOS 设计模式系列:Facade – 外观模式

目前你有 PersistencyManager 来在本地存储专辑数据,HTTPClient 处理远程通信。项目中其它的类跟这些逻辑都没关。 执行这个模式,只有 LibraryAPI 来保存 Pe...
  • yuanchunzi
  • yuanchunzi
  • 2015年07月28日 14:54
  • 233

外观(Facade)模式[python版]

外观(Facade)模式:为子系统中的一组接口提供一个一致的界面。 ——此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 与其它模式的区别:与 “简单工厂模式+策略模式”的组合版...
  • ponder008
  • ponder008
  • 2011年10月13日 09:46
  • 1235

设计模式(结构型)之外观模式(Facade Pattern)

一个客户类需要和多个业务类交互,而这些业务类经常会作为整体出现,由于涉及到的类比较多,导致使用时代码较为复杂。外观模式通过引入一个新的外观类(Facade)来实现该功能,外观类为多个业务类的调用提供统...
  • yanbober
  • yanbober
  • 2015年05月04日 09:29
  • 2518

设计模式C++描述----14.外观(Facade)模式

一. 举例说明 还以我以前做的文件系统(FileSys)为例: 文件系统是一个独立的系统,它提供一套核心的文件操作。 除了文件系统,还有四个子系统,分别是杀毒子系统(KillVirus),压缩子...
  • lwbeyond
  • lwbeyond
  • 2012年05月14日 11:22
  • 2007

设计模式 --外观模式(Facade)

什么是外观模式? 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。   简单点说:外观模式是一种使用频率非常高的结构型设计模式...
  • u014034854
  • u014034854
  • 2015年08月05日 00:33
  • 1303

浅谈JAVA设计模式之——外观模式(Facade)

一、概述 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 二、适用性 1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断...
  • l1028386804
  • l1028386804
  • 2015年05月07日 23:32
  • 3373

C# 设计模式--外观模式(Facade)

     一个良好的面向对象应用程序应该是一个最小的类,这个类能够把其他可重用类的行为有效的组织起来。对一个子系统的类进行重构,直到每个类都有一个进行良好定义功能目标,所以代码易于维护。外观模式(Fa...
  • scucj
  • scucj
  • 2006年11月09日 00:22
  • 3217

【设计模式】使用unity实现外观模式(Facade mode)

阅读《大话设计模式》后,自己根据unity的特性写的一个简单demo,如有不妥之处,欢迎评论纠正.... 首先贴上书中关于外观模式的代码: using System...
  • qq_28221881
  • qq_28221881
  • 2017年04月05日 21:32
  • 404
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:外观模式(Facade)
举报原因:
原因补充:

(最多只允许输入30个字)