Structural Patterns Part 5/7: Facade Pattern

Structural Patterns Part 5/7: Facade Pattern

目录


Definition

Facade Pattern提供这样一个类,这个类里的方法需要做一系列的动作才能完成一件事情。

一句话:
One class has a method that performs a complex process calling several other classes

何时使用?当一个流程的完成需要很多步骤,需要为外界提供一个统一的接口时。

使用频率:Frequency of use High


UML Class Diagram

Facade Pattern


Implementation

作为实例,假设一台电脑需要无线上网,那么

  • 需要ISP供应商提供带宽
  • 需要路由器可以提供无线网
  • 需要电脑连接上无线网

因为上网都需要这三个步骤,所以可放在一个公共的接口中进行。

// Domain.java
package designpatterns.structuralpatterns.facade;

class Computer {
    public void connect() {
        System.out.println("Computer is connecting to the internet...");
    }
}

class Router {
    public void wifi() {
        System.out.println("Router is booting...");
    }
}

class Provider {
    public void provide() {
        System.out.println("Provider is preparing the network for the user...");
    }
}

// FacadeDemo.java
package designpatterns.structuralpatterns.facade;

public class FacadeDemo {
    public static void main(String[] args) {
        Facade facade = new Facade(new Computer(), new Router(), new Provider());
        facade.surf();
    }
}

class Facade {
    private Computer computer;
    private Router router;
    private Provider provider;

    public Facade(Computer computer, Router router, Provider provider) {
        this.computer = computer;
        this.router = router;
        this.provider = provider;
    }

    public void surf() {
        System.out.println("Preparation...");
        System.out.println();       
        provider.provide();
        System.out.println("===Network Provided!===");
        router.wifi();
        System.out.println("===Wifi is okay!===");
        computer.connect();
        System.out.println("===Wifi connected!===");
        System.out.println();
        System.out.println("Sufing on internet now!");
    }
}


// output
Preparation...

Provider is preparing the network for the user...
===Network Provided!===
Router is booting...
===Wifi is okay!===
Computer is connecting to the internet...
===Wifi connected!===

Sufing on internet now!
posted @ 2016-06-04 16:30  1202zhyl  阅读(123)  评论(0编辑  收藏  举报