场景:当外界某个对象与某个系统内的多个组件都要进行交互时,这个系统可以对外提供一个统一的接口,与外界这个对象对接,这样可以对外隐藏系统内部的复杂性,接口内部调用各个组件功能。
实现:定义一个Facade, 有多个组件就定义多个MemberA,MemberB等等。
例子:
package com.example.demo.designpattern.facade; /** * 某系统内组件A */ public class MemberA { public void work() { System.out.println("MemberA work"); } public void rest() { System.out.println("MemberA rest"); } }
/** * 某系统内组件B */ public class MemberB { public void work() { System.out.println("MemberB work"); } public void rest() { System.out.println("MemberB rest"); } }
定义门面类:
public class Facade { private MemberA memberA; private MemberB memberB; public Facade() { memberA = new MemberA(); memberB = new MemberB(); } public void work() { memberA.work(); memberB.work(); } public void rest() { memberA.rest(); memberB.rest(); } }
外部调用:
public class Test { public static void main(String[] args) { Facade facade = new Facade(); facade.work(); facade.rest(); } }